查找一起出现在阵列中的Mongo ObjectIds

时间:2016-01-12 02:29:47

标签: mongodb

我有一个包含以下内容的架构的文档:

{
    ...
    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

我不太确定如何进行分组操作。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

尝试以下。


var pipeline ;

pipeline = [
  {
    $match: {entities: '12345'}
  },
  {
    $unwind: '$entities'
  },
  {
    $group: {_id: '$entities', count: {$sum: 1}},
  },
  {
    $sort: {'count': -1}
  }

];
db.mycollection.aggregate(pipeline)