聚合mongodb中具有多个条件的addToSet

时间:2019-11-21 16:55:35

标签: mongodb aggregation-framework

我有这样的文档

  {
    "_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值的 event 值都应放入数组,因此下一步输出应如下所示

{ 
   "_id":{ 
      "subscriber_id":4504
   },
   "event_details":[ 
      "eventA",
      "eventB"
   ]
}

此处eventAeventB都具有值1,因此它们都将被压入数组。

1 个答案:

答案 0 :(得分:0)

为什么这么复杂?您只需要小组讨论即可达到所需的目的:

docker logs containerid

将输出:

2019-11-22 07:03:48.912930: I tensorflow_serving/servables/tensorflow/saved_model_warmup.cc:103]
2019-11-22 07:03:48.938568: I tensorflow_serving/model_servers/server.cc:324] Running gRPC ModelServer at 0.0.0.0:8500 ...
[warn] getaddrinfo: address family for nodename not supported
2019-11-22 07:03:48.947993: I tensorflow_serving/model_servers/server.cc:344] Exporting HTTP/REST API at:localhost:8503 ...
[evhttp_server.cc : 239] RAW: Entering the event loop ...