Jef*_*ian 7 mongodb mongodb-query aggregation-framework
我在 mongodb 中很新,现在我需要计算一个 $lookup 字段,这可能吗?
我有这样的事情:
result = await company.aggregate([
{
$lookup: {
from: 'userFocus',
localField: '_id',
foreignField: 'value',
as: 'focusUsers'
}
},
{
$project:{
name: 1,
focusUsers: {userId: 1}
}
}
])
Run Code Online (Sandbox Code Playgroud)
结果如下所示:
[
{_id: 'xxxx', name: 'first company', focusUsers: [user1, user2, user3...]},
{_id: 'yyyy', name: 'second company', focusUsers: []},
{_id: 'zzzz', name: 'third company', focusUsers: []}
]
Run Code Online (Sandbox Code Playgroud)
现在我想要一个额外的列显示 focusUsers 计数,换句话说,我想要一个如下所示的结果:
[
{_id: 'xxxx', name: 'first company', focusUsers: [user1, user2, user3], focusCount: 3},
{_id: 'yyyy', name: 'second company', focusUsers: [], focusCount: 0},
{_id: 'zzzz', name: 'third company', focusUsers: [], focusCount: 0}
]
Run Code Online (Sandbox Code Playgroud)
是否可以?怎么做?请高手指点一下,先谢过了!
Ash*_*shh 12
您可以使用$size 聚合运算符来查找数组的长度。
company.aggregate([
{ "$lookup": {
"from": "userFocus",
"localField": "_id",
"foreignField": "value",
"as": "focusUsers"
}},
{ "$project": {
"name": 1,
"focusUsers": 1,
"focusCount": { "$size": "$focusUsers" }
}}
])
Run Code Online (Sandbox Code Playgroud)