Создать зависимости между документами в MongoDB - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу создать зависимость между некоторыми документами в моей коллекции.Например, у меня есть документ A, и я хочу использовать некоторые его поля в документе B в качестве подраздела.Поэтому, если я изменю документ A, поля, которые также находятся в документе B., также изменятся.

Вот лучшее объяснение с фактическими JSON: Вот документ A

{ 
    "_id": ObjectId("1"),
    "value": 10,
    "name": "A_document_name",
    "owner": "some_owner"
}

Вот документ B

{
    "_id": ObjectId("2"),
    "description": "some_description",
    "valid": true,
    "name": "some_name",
    "items": [
        {
            "id": "1",
            "name": "A_object_name"
        }
    ]
}

Теперь я хочу, чтобы, если я изменил имя документа A, я хотел видеть, что он также изменился в разделе элементов документа B. В настоящее время, когда я меняю имя A, онизменения только в A и B остаются неизменными с момента его создания.Это достижимо в Монго?Как я могу создать ссылку между items разделом в B с A?Нужно ли что-то менять в структуре моего документа?

1 Ответ

3 голосов
/ 23 сентября 2019

В основном вы можете использовать mongoose virtual populate .Вы можете добиться этого, храня B в отдельном наборе и в основном заполняя массив в схеме A, используя _id для зала, позвольте мне показать вам пример:

Ваша схема B будет выглядеть примерно так

const mongoose = require('mongoose');

const bSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    description: String,
    valid: type: Boolean, 
    name: String
});

bSchema.virtual('a_items', {
  ref: 'A', // The model to use
  localField: '_id', // Find a_items where `localField`
  foreignField: 'b_id', // is equal to `foreignField`
  // If `justOne` is true, 'product' will be a single doc as opposed to
  // an array. `justOne` is false by default.
  justOne: false,
  options: { } //  Optional query options
});

module.exports = mongoose.model('B', loungeSchema);

А ваша схема A

const mongoose = require('mongoose');

const aSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    b_id: mongoose.Schema.Types.ObjectId, //valid b_Id make it required
    name: String, 
    owner: String
});

module.exports = mongoose.model('A', bSchema);

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

B.find({}).populate({ path: 'a_items', select: '_id name' }).exec();

массив a_items будет тогдазаселены и имеют связанные объекты.дайте мне знать, если это работает.

В зависимости от вашего случая использования вы можете сделать простой заполнение мангуста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...