【发布时间】:2016-10-08 02:03:36
【问题描述】:
众所周知,find() 返回一个结果数组,findOne() 只返回一个简单的对象。
对于 Angular,这会产生巨大的差异。我可以直接写{{myresult.name}},而不是{{myresult[0].name}}。
我发现聚合管道中的$lookup 方法返回一个结果数组,而不仅仅是一个对象。
例如,我有两个集合:
users收藏:
[{
"firstName": "John",
"lastName": "Smith",
"country": 123
}, {
"firstName": "Luke",
"lastName": "Jones",
"country": 321
}]
countries收藏:
[{
"name": "Australia",
"code": "AU",
"_id": 123
}, {
"name": "New Zealand",
"code": "NZ",
"_id": 321
}]
我的聚合$lookup:
db.users.aggregate([{
$project: {
"fullName": {
$concat: ["$firstName", " ", "$lastName"]
},
"country": "$country"
}
}, {
$lookup: {
from: "countries",
localField: "country",
foreignField: "_id",
as: "country"
}
}])
查询结果:
[{
"fullName": "John Smith",
"country": [{
"name": "Australia",
"code": "AU",
"_id": 123
}]
}, {
"fullName": "Luke Jones",
"country": [{
"name": "New Zealand",
"code": "NZ",
"_id": 321
}]
}]
从上面的结果可以看出,每个country 都是一个数组,而不是像"country": {....} 这样的单个对象。
我怎样才能让我的 $lookup 返回单个对象而不是数组,因为它只会匹配单个文档?
【问题讨论】:
-
我也觉得这应该从他们的角度来处理。如果只有一个匹配,它应该返回一个对象,而不是一个包含单个对象的数组。
标签: mongodb mongodb-query aggregation-framework