Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Правильная структура данных

#javascript #nodejs


Я столкнулся с неожиданно неприятной проблемой. Вроде знаю как работать с обьектами
а вроде хочу сделать это красиво и удобно что бы потом не возвращаться к этому вопросу. 

У меня есть Schema для работы с MongoDB через Mongoose. Юзер сможет заполнять свою
информацию в любой момент и в любом порядке. Так есть что бы подтвердить заявку нужно
заполнить все поля но база будет хранить и не завершенные запросы для удобности пользователей. 

Для этого я добавил еще один массив обьектов который будет служить:


Списком всех полей 
Описанием поля для пользователя
Индекс полей что бы сверить с данными из базы и найти что еще не заполнено, после
чего продолжить процесс заполнения с последней точки


Проблема в том, что если просто сделать обьект с обьектами я не знаю как удобно запрашивать
информацию по индексу И полю. Так есть мне нужно что бы было возможно запросить информацию
про каждое поле типа:

Эй, скажи мне что такое name.


Пожалуйста: Your name


А что под номером 3? 


field: "age"


Покажи мне список полей с важностью 1. 

1: {field: "name", type: "String", description: "Your name", rank: 1},
2: {field: "nickname", type: "String", description: "Nickname that will be shown
to others", rank: 1}


Пример списка:

1: {field: "name", type: "String", description: "Your name", rank: 1},
2: {field: "nickname", type: "String", description: "Nickname that will be shown
to others", rank: 1},
3: {field: "age", type: "Number", description: "Your age", rank: 2},


Даже учитывая что можно заполнять в любом порядке важно иметь очередность полей что
бы можно было пройтись по всем полям по порядку тем же for или each. 

По-моему мой запрос выходит похож на что-то подобное базе данных, возможно локальной,
а возможно мне стоило бы добавить эту информацию в БД? Я не уверен можно ли добавить
подобную статическую информацию в схему, так что было бы интересно увидеть. Или обьясните
мне чего я не понимаю, почему это так сложно понять для меня. 

Спасибо за внимание, я уже не 1 час сижу пытаюсь понять что делать. Нашел Map(),
который работает только для ключа и строки, не сильно полезно, а так же библиотеки
collection.js и Buckets JS которые выглядят неплохо, но я побаиваюсь использовать библиотеку
для одного лишь списка. А так же JS базы данных: PouchDB и TaffyDB. Первая очень красивая,
но у меня чувство что слишком большая для поставленной задачи. Вторая тоже предназначена
для куда больших целей чем нужно. Может я не прав, хотелось бы тогда услышать почему.
    


Ответы

Ответ 1



TaffyDB Функционал почти как у обычных SQL поддерживает (CRUD), упрощенная выборка и обновление. // Create DB and fill it with records var friends = TAFFY([{ "id": 1, "gender": "M", "first": "John", "last": "Smith", "city": "Seattle, WA", "status": "Active" }, { "id": 2, "gender": "F", "first": "Kelly", "last": "Ruth", "city": "Dallas, TX", "status": "Active" }, { "id": 3, "gender": "M", "first": "Jeff", "last": "Stevenson", "city": "Washington, D.C.", "status": "Active" }, { "id": 4, "gender": "F", "first": "Jennifer", "last": "Gill", "city": "Seattle, WA", "status": "Active" } ]); // Find John Smith, by ID var id = friends({ id: 1 }); console.log(id.first().first); // Get an array of record ids var cities = friends().select("id"); console.log(cities); Реально проще уже некуда и мало весит. var cities = TAFFY([{ name: "New York", state: "WA" }, { name: "Las Vegas", state: "NV" }, { name: "Boston", state: "MA" }]); cities.insert({ name: "Portland", state: "OR" }); console.log(cities({ name: "Boston" }).count()); PouchDB Эта будет мощнее синхронизация с локальными и удаленными базами. Непрерывная работа с пользователем и ошибки на сервере её не пугают, сохраняет то что делал юзер и только когда может послать на сервер посылает, отказоустойчива. //---------------------------------------------------------------- // Немного не так легко как с TaffyDB если нет удаленной базы, // с другой стороны легко синхронизируется с сервером //---------------------------------------------------------------- var db = new PouchDB('databaseName'); db.put(data) .then(res => { console.log(res); /* handling result */ }) .catch(err => { console.log(err); /* errors handling */ }); db.remove(data) .then(response => { /* handling result */ }) .catch(err => { /* errors handling */ }); db.get(data) .then(doc => { /* do something with document */ }) .catch(err => { /* errors handling */ }); console.log(db.info()); Можно почитать тут

Комментариев нет:

Отправить комментарий