聚合mongodb中具有多个条件的addToSet
我有这样的文档:聚合mongodb中具有多个条件的addToSet,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有这样的文档: { "_id" : ObjectId("5dc3c093c05bd833c4258e25"), "subscriber_id" : 4504, "user_country" : "India", "event" : "eventA" }, { "_id" : ObjectId("5dc3c093c05bd833c4258e25"), "subscriber_id" : 4504, "user_country"
{
"_id" : ObjectId("5dc3c093c05bd833c4258e25"),
"subscriber_id" : 4504,
"user_country" : "India",
"event" : "eventA"
},
{
"_id" : ObjectId("5dc3c093c05bd833c4258e25"),
"subscriber_id" : 4504,
"user_country" : "India",
"event" : "eventB"
}
从下面查询我得到:
db.collection.aggregate(
{
$project:{
_id:1,
user_country:1,
subscriber_id:1,
event:1
}
},
{
$group:{
"_id":{
"subscriber_id":"$subscriber_id",
"eventA":{
$cond:{
"if":{
"$and":[
{
"$eq":[
"$event",
"eventA"
]
}
]
},
then:1,
else:0
}
},
"eventB":{
$cond:{
"if":{
"$and":[
{
"$eq":[
"$event",
"eventB"
]
}
]
},
then:1,
else:0
}
}
}
}
},
{
$group:{
"_id":{
"subscriber_id":"$_id.subscriber_id"
},
"event_details":{
$push:{
"eventA":"$_id.eventA",
"eventB":"$_id.eventB"
}
}
}
}
);
输出:
{
"_id":{
"subscriber_id":4504
},
"event_details":[
{
"eventA":0,
"eventB":0
},
{
"eventA":1,
"eventB":0
},
{
"eventA":0,
"eventB":1
}
]
}
现在,我希望对于每一行,无论事件的1
值是多少,都应该推送到数组中,所以下一步的输出应该是这样的
{
"_id":{
"subscriber_id":4504
},
"event_details":[
"eventA",
"eventB"
]
}
这里的
eventA
和eventB
都有值1
,所以都会推送到数组中。为什么这么复杂?你只需要有一个小组阶段就可以实现你所需要的:
db.collection.aggregate([
{
$group: {
_id: "$subscriber_id",
event_details: {
$addToSet: "$event"
}
}
}
]
将输出:
[
{
"_id": 4504,
"event_details": [
"eventB",
"eventA"
]
}
]