用户没有执行过事件x的MongoDB组(MongoDB Group by users having not performed event x)
我有一个活动集合。 我希望没有执行事件点击的用户。 示例 -
collection - { 'event' : 'open' 'user' : 1 }, { 'event' : 'open' 'user' : 2 }, { 'event' : 'click' 'user' : 2 }我想要的结果如下:
{ 'user' : 1 }我得到的是:
{ 'user' : 1 }, { 'user' : 2 }我的代码:
$collection->aggregate(array( array('$match' => array('$event' => array('$not' => 'click')) ), array('$group' => array( '_id' => '$user' ), ) ))I have a events collection. I want users who did not perform event click. Example -
collection - { 'event' : 'open' 'user' : 1 }, { 'event' : 'open' 'user' : 2 }, { 'event' : 'click' 'user' : 2 }I want result as following :
{ 'user' : 1 }What i am getting is :
{ 'user' : 1 }, { 'user' : 2 }My Code :
$collection->aggregate(array( array('$match' => array('$event' => array('$not' => 'click')) ), array('$group' => array( '_id' => '$user' ), ) ))最满意答案
我应该先对文档进行分组,然后过滤未点击的用户,然后按照您的首选格式来投影结果。
$collection->aggregate(array( array('$group' => array( '_id' => '$user','events' => array('$push'=>'event') ), array('$match' => array('$events' => array('$not' => 'click')) ), array('$project' => array('user' => '$user') ), ))I should first group the documents and then filter the user who havent clicked and then project the result in your preferred format.
$collection->aggregate(array( array('$group' => array( '_id' => '$user','events' => array('$push'=>'event') ), array('$match' => array('$events' => array('$not' => 'click')) ), array('$project' => array('user' => '$user') ), ))更多推荐
发布评论