Структурирование моей mongoDB для проекта и доступ к вложенным массивам - PullRequest
0 голосов
/ 08 мая 2020

Вот как сейчас выглядит моя структура БД: enter image description here

Falafel - это учетная запись в моем приложении, учетные записи в моем приложении могут содержать данные своих клиентов такие как номера телефонов, IP, страна и многое другое. Банан - пример покупателя Фалафеля. Каждый раз, когда кто-то новый регистрируется в качестве покупателя Falafel, мне нужно проверить, есть ли у Falafel уже клиент с тем же телефоном (чтобы никто не мог зарегистрироваться дважды). На данный момент это мой код:

 Account.findOne({ userName: userName })
              .then((result) => {
                console.log(result.subs);
                Account.findOne({ phone: phone });
              })

              .then((result) => {
                if (result === null) {
                  console.log("Phone is available");}

Account.findOne находит нужный документ, в моем примере он находит документ, содержащий фалафель и всю его информацию, включая массив «subs», в котором есть все информация о своих клиентах. Как вы видите, в моем коде проблема начинается с четвертой строки «Account.findOne ({phone: phone})». Я пытаюсь проверить, есть ли у кого-либо из подписчиков фалафеля введенный номер телефона, хранящийся в переменная с именем «телефон». Моим первым побуждением было набрать это:

Account.findOne({ result.subs.phone: phone })

, но это не сработало. Что я могу сделать с этой проблемой? и является ли структура моей БД хорошей практикой ??

1 Ответ

0 голосов
/ 08 мая 2020

Это плохой дизайн. Рассмотрите возможность разделения вашей модели на коллекцию Account и коллекцию Customer. Клиент будет ссылаться на учетную запись, которой он принадлежит (точно так же, как типичный внешний ключ в реляционной базе данных).

Учетная запись:

{
  _id: ObjectId("1"),
  username: "user",
  pass: "pass", // at least hash and salt it pls
  desc: "desc"
}

Клиент:

{
  _id: ObjectId("2"),
  accountId: ObjectId("1"),
  name: "banana"
}

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

...