Ссылки в 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. но я думаю, что это создаст больше сложности.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.

Другие вопросы по теме