Лучший способ хранения одного независимого документа в mongodb

#database #mongodb #mongoose

Вопрос:

У меня есть приложение MERN, у меня есть куча коллекций в моей БД, теперь я хочу сохранить объект, представляющий заказ:

Допустим, у меня есть «пункт 1, пункт 2, пункт 3» в коллекции «предметы», каждый из которых может быть чем угодно на самом деле;

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

Это пример документа, который я хочу сохранить: (Индекс массива-это их порядок)

 {
    items: [{itemId:xxx, otherprops...}, {itemId: yyy, otherprops...}]
}
 

Коллекция предметов может содержать 100 предметов, поэтому изменение порядка в этой коллекции не является правильным вариантом для моих нужд.

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

1. вы хотите хранить данные каждого пользователя, и каждый заказ содержит товары ?

2. @mohammadNaimi Нет, общий порядок для всех пользователей, установленный администратором, в противном случае коллекция была бы моим выбором

Ответ №1:

правильно ли создавать коллекцию только для хранения в ней одного документа

Если вы посмотрите на admin базу данных в mongodb, вы увидите, что она делает что-то похожее на то, что я думаю, вы пытаетесь сделать. Есть system.version коллекция. В этой коллекции я видел документы, содержащие информацию, похожую на настройки. Например, свойство featureCompatibility фактически хранится в виде документа с _id: «Совместимость функций». Идентификационные данные фрагментов также хранятся в этой коллекции в виде единого документа:

 {
  "_id" : "shardIdentity",
  "clusterId" : ObjectId("2bba123c6eeedcd192b19024"),
  "shardName" : "shard2",
  "configsvrConnectionString" : "configDbRepl/alpha.example.net:28100,beta.example.net:28100,charlie.example.net:28100" }
 

В коллекции system.version есть только один такой документ. Вы очень хорошо можете создать свою собственную коллекцию настроек, в которой вы храните эти сделанные на заказ документы. Это, конечно, не неслыханно.

Взгляните на раздел «С учетом осколков» в официальной документации mongodb, чтобы увидеть этот тип практики в действии:

https://docs.mongodb.com/manual/release-notes/3.6-upgrade-sharded-cluster/#prerequisites