我有一个包含以下内容的架构的文档:
{
...
entities : [ ObjectId ]
}
我的目标是找到entities
数组中哪个ObjectIds与给定的ObjectId最相似。例如,如果我提供的ID为12345
(或其他),我希望在12345
的{{1}}中找回与entities
一起出现的所有文档12345
的列表entities
1 {}在12345
数组中,以及它们一起出现的总次数。
我想我必须使用聚合框架,我的匹配器只会选择entities
数组中entities
的ObjectId出现的所有文档。
对于分组操作,我认为需要遍历每个匹配的文档,并保持每个ObjectId在[
{ ObjectId(23456) : 53 },
{ ObjectId(34567) : 30 },
{ ObjectId(45678) : 16 }
]
数组中出现的次数的全局计数,因此输出将类似于:
Buffer/BufferedMLDataSet.cs
我不太确定如何进行分组操作。有什么建议吗?
答案 0 :(得分:1)
尝试以下。
var pipeline ;
pipeline = [
{
$match: {entities: '12345'}
},
{
$unwind: '$entities'
},
{
$group: {_id: '$entities', count: {$sum: 1}},
},
{
$sort: {'count': -1}
}
];
db.mycollection.aggregate(pipeline)