Рассмотрим следующий документ в коллекции с именемКак построить запрос для привязки поля родительского документа к полю документа встроенного массива. Использование MongoDB агрегации Операторы
{
"_id" : "MY_ID",
"ThisCityID" : "001",
"CityIDs" : [{
"CityID" : "001",
"CityName" : "Bangalore"
}, {
"CityID" : "002",
"CityName" : "Mysore"
}],
"CityUserDetails": {
"User" : "ABCD"
}
}
Теперь я User
значение, то есть в приведенном выше случае у меня есть значение ABCD
и хотите найти его единственный город, где поле первого уровня в «CityAssociation» ThisCityID
соответствует полям встроенного массива documnet CityID
. Наконец мне нужно проецировать следующим образом (для вышеприведенного случая):
{
'UserName': 'ABCD',
'HomeTown':'Bangalore'
}
В Node.js + MongoDB родной диск, я написал запрос агрегирования следующим образом, который не работает, как ожидалось.
collection.aggregate([
{ $match: { 'CityUserDetails.User': 'ABCD', 'CityIDs': { $elemMatch: { CityID: ThisCityID}}} },
{ $unwind: "$CityIDs" },
{ $group: {
_id: '$_id',
CityUserDetails: { $first: "$CityUserDetails" },
CityIDs: { $first: "$CityIDs" }
}
},
{ $project: {
_id: 0,
"UserName": "$CityUserDetails.User",
"HomeTown": "$CityIDs.CityName"
}
}
], function (err, doc) {
if (err) return console.error(err);
console.dir(doc);
}
);
Может ли кто-нибудь сказать мне, как это можно сделать с помощью запроса.
Примечание: На схеме MongoDB у нас нет контроля, чтобы изменить его.
очень красиво ... спасибо это работает ... –