MongoDB唯一计数

MongoDB唯一计数,mongodb,Mongodb,大家好,我将尝试给出一个简单的例子,说明我正在努力实现的目标,我已经尝试使用聚合管道和distinct,但我有点迷失了方向 我有以下记录 item1 - A : "xxxx", U : "1111" item2 - A : "xxxx", U : "2222" item3 - A : "bbbb", U : "1111" item4 - A : "bbbb", U : "3333" item4 - A : "xxxx", U : "3333" 我正在尝试编写一个查询,它将为我提供一个唯一的U计

大家好,我将尝试给出一个简单的例子,说明我正在努力实现的目标,我已经尝试使用聚合管道和distinct,但我有点迷失了方向

我有以下记录

item1 - A : "xxxx", U : "1111"
item2 - A : "xxxx", U : "2222"
item3 - A : "bbbb", U : "1111"
item4 - A : "bbbb", U : "3333"
item4 - A : "xxxx", U : "3333"
我正在尝试编写一个查询,它将为我提供一个唯一的U计数,其中U有一条记录
匹配a=“xxxx”和a=“bbbb”


因此,在上述情况下,计数为2,因为只有两个用户拥有
bbbb和xxxx的记录

如何使用聚合? 原始数据:

> db.items.find({}, {_id: 0})
{ "A" : "xxxx", "U" : "1111" }
{ "A" : "xxxx", "U" : "2222" }
{ "A" : "bbbb", "U" : "1111" }
{ "A" : "bbbb", "U" : "3333" }
{ "A" : "xxxx", "U" : "3333" }
聚合查询:

> db.items.aggregate([{$group: {_id: '$U', alist: {$push: '$A'}}}, {$match: {alist: {$all: ['bbbb', 'xxxx']}}}])
{ "_id" : "3333", "alist" : [ "bbbb", "xxxx" ] }
{ "_id" : "1111", "alist" : [ "xxxx", "bbbb" ] }

我认为这是可行的,我可以稍微复杂一些吗?向记录中添加一个状态,使其完全相同,但另一个条件是状态允许调用它S must=1。例如,它取决于需要添加它的位置。如果它是在聚合后过滤的,那么只需将其添加到$match:如果不是,请详细说明并给出一个例子。{“S”:“1”,“A”:“xxxx”,“U”:“1111”}{“S”:“1”,“A”:“xxxx”,“U”:“2222”}{“S”:“1”,“A”:“bbbb”,“U”:“1111”}{“S”:“2”,“A”:“BBBBBBBB”,“U”:“3333”}{“S”:“2”,“A”:“xxxx”,“U”:“3333”}因此,用户需要有一个与a=xxxx和S=2匹配的记录,以及一个与a=bbbb和S=2匹配的记录,将S值推送到
slist
,然后在$match中为
slist
使用$all。如果您需要将其用于初始筛选,则可以使用:
db.items.aggregate([{$match:{S:{S:'1}},{$group:{U id:'$U',列表:{$push:'$A'}},{$match:{LIST:{$all:['bbbb',xxxx']}}}])