Ссылки в MongoDB

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

const schemaOne = new Schema({
   name: string,
// other fields
})

const schemaTwo = new Schema({
   name: string
// other fields
})

const schemaThree = new Schema({
// I want to reference a document from schemaOne or two in one field
   someId: ObjectId,
})

Решение, которое я не пытаюсь сделать, — это создать два поля: одно для SchemaOne, а другое для SchemaTwo. но я думаю, что это создаст больше сложности.

🤔 А знаете ли вы, что...
JavaScript можно использовать для создания анимаций и игр на веб-страницах.


2
63
1

Ответ:

Решено

Вы можете использовать refPath . Это позволяет вам иметь поле schemaThree, в котором указывается, какую модель использовать при заполнении.

const schemaThree = new Schema({
   someId: {
      type: Schema.Types.ObjectId,
      refPath: 'modelNameSpecifier', //< this is used during populate()
   },
   modelNameSpecifier: {
      type: String,
      required: true,
      enum: ['ModelOne', 'ModelTwo']
   }
});

const docs = await ModelThree.find({}).populate('someId');

Когда вы создаете документ с помощью ModelThree, просто убедитесь, что вы сохранили ObjectId в поле someId той схемы, которая связана с этим Objectid в modelNameSpecifier, как ModelOne для schemaOne или ModelTwo для schemaTwo.