以下是user
集合的示例MongoDB数据模型:
{
"_id": ObjectId('58842568c706f50f5c1de662'),
"userId": "123455",
"user_name":"Bob"
"interestedTags": [
"music",
"cricket",
"hiking",
"F1",
"Mobile",
"racing"
],
"listFriends": [
"123456",
"123457",
"123458"
]
}
listFriends
是其他用户的userId
数组
对于特定的userId
,我需要提取listFriends
(userId
),对于那些userId
,我需要汇总interestedTags
和他们的数量。
我可以通过将查询分为两部分来实现这一目标:
1。)提取特定listFriends
的{{1}},
2。)在userId
函数中使用此列表,如下所示
aggregate()
我正在尝试解决这个问题:有没有办法在单个聚合函数中实现上述功能(步骤1和2)?
答案 0 :(得分:0)
您可以使用$lookup
查找朋友文档。这个阶段通常用于连接两个不同的集合,但它也可以在一个集合上加入,在你的情况下我认为应该没问题:
db.user.aggregate([{
$match: {
_id: 'user1',
}
}, {
$unwind: '$listFriends',
}, {
$lookup: {
from: 'user',
localField: 'listFriends',
foreignField: '_id',
as: 'friend',
}
}, {
$project: {
friend: {
$arrayElemAt: ['$friend', 0]
}
}
}, {
$unwind: '$friend.interestedTags'
}, {
$group: {
_id: '$friend.interestedTags',
count: {
$sum: 1
}
}
}]);
注意:我使用$lookup
和$arrayElemAt
只能在Mongo 3.2或更新版本中使用,因此请在使用此管道之前检查您的Mongo版本。