Поиск по ссылочному полю

#mongodb #mongodb-query

#mongodb #mongodb-запрос

Вопрос:

У меня есть две коллекции: City и Country. В City у меня есть поле country , которое является ссылкой на коллекцию Country.

Итак, я попытался найти как:

 db.city.find( { country.name: "USA" } )
  

но это возвращает пустой массив. Если я использую поиск без выражения, то это возвращает мне все результаты, также с «USA».

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

1. пожалуйста, опубликуйте структуру данных вашей коллекции contryи city

Ответ №1:

Рассмотрите возможность использования $lookup оператора в платформе агрегации, который выполняет левое внешнее соединение с другой коллекцией в той же базе данных для фильтрации документов из «объединенной» коллекции для обработки:

 db.city.aggregate([
    {
        "$lookup": {
            "from": "country",
            "localField": "country",
            "foreignField": "_id", // <-- reference field from country collection
            "as": "resultingArray"
        }
    },
    { "$match": { "resultingArray.name": "USA" } }
])
  

Ответ №2:

Предполагая, что вы ссылаетесь на страну через ее идентификатор в коллекции city, я думаю, что вам нужно сделать это рекурсивно. Это может быть возможным решением:

 db.country.find({ name: "USA" }, function(err, country) {
  db.city.find({ country: country.id }, function(err, cities) {
    // do something with the data...
  });
});