最佳答案
大家都知道,find()
返回一个结果数组,而 findOne()
只返回一个简单的对象。
使用角度,这会产生很大的不同。我可以只写 {{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
返回一个单一的对象而不是一个数组,因为它将永远只匹配一个单一的文档?