考虑名为“CityAssociation”的集合中的以下文档
{
"_id" : "MY_ID",
"ThisCityID" : "001",
"CityIDs" : [{
"CityID" : "001",
"CityName" : "Bangalore"
}, {
"CityID" : "002",
"CityName" : "Mysore"
}],
"CityUserDetails": {
"User" : "ABCD"
}
}
现在我有了User
价值,即在上述情况下,我有价值ABCD
,并且只想在第一级的字段ThisCityID
与嵌入式数组文档的字段匹配的城市中找到它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 架构上,我们无法控制更改它。