1

我有一个集合,其中来自不同集合的唯一文档可以一遍又一遍地出现(在下面的示例中item),具体取决于用户共享它们的程度。我想创建一个聚合查询来查找最共享的文档。没有必要 $match 因为我不匹配某个条件,我只是查询最共享的。现在我有:

db.stories.aggregate(
    {
        $group: {
            _id:'item.id', 
            'item': { 
                $first: '$item'
            }, 
            'total': { 
                $sum: 1
            }
        }
    }
);

但是,这只返回 1 个结果。我突然想到我可能只需要做一个简单的find查询,但我希望汇总结果,以便每个结果都有项目,并且总计是它在集合中出现的次数。

故事集合中的文档示例:

{
    _id: ObjectId('...'),
    user: {
        id: ObjectId('...'),
        propertyA: ...,
        propertyB: ...,
        etc
    },
    item: {
        id: ObjectId('...'),
        propertyA: ...,
        propertyB: ...,
        etc
    }
}

users每个人items都有自己的收藏品。

4

1 回答 1

1

换行

_id:'item.id'

_id:'$item.id' 

目前,您按常量“item.id”分组,因此您只能得到一个文档作为结果。

于 2016-06-13T16:16:06.570 回答