#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...
});
});