Как найти документы по идентификатору из массива идентификаторов, взятых из другой схемы? - PullRequest
0 голосов
/ 31 января 2019

У меня есть 2 схемы Мангуста, например:

 var RecipeSchema = new Schema({
      type: String,
      version: String,
      data:  [{type: Schema.ObjectId, ref: 'Data'}]
  });
  var Recipe = mongoose.model("Recipe", RecipeSchema);

 var DataSchema = new Schema({
     ex1: String,
     ex2: String,
     ex3: String
 });
 var Data = mongoose.model("Data", DataSchema);

Если я работаю в функции с «выбранным» рецептом, как я могу сделать Data.find (), чтобы соответствовать в схеме данныхтолько данные с _id, который у меня есть в массиве данных?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Фиксированный тип поля:

data: {
  type: [Schema.ObjectId],
  ref: 'Data',
  default: []
}

Использование:

const Recipe = mongoose.model('Recipe');

router.get('/recipes', async (req, res) => {
  try {
    const recipes = await Recipe.find({}).populate('data').lean();
    res.status(200).send(recipes);
  }
  catch (error) {
    res.status(500).send({message: error.message});
  }
});
0 голосов
/ 31 января 2019

Учитывая, что выбранный рецепт является «рецептом», вы можете просто сделать,

recipe.populate('data', function (err, recipe) {
    // here recipe.data will have the array of data objects instead of just _ids
  });

Это не будет работать, если выбранный рецепт скудный или не мангустовый документ

...