2014-10-17 105 views
0

我有收藏夹,用于将用户购买的商品以及喜欢和不喜欢的东西从他的朋友那里购买。收藏领域看起来像这样:Mongo - 具有多种条件的聚合

{ "_id" : ObjectId("543e43cea7c481c4820ab014"), "user" : "542ea90fbb1e37b09f660980", "product" : "543e43cea7c481c4820ab013", "store" : "542e6fb1a2a8a7a071490555", "status" : "active", "dislikes" : 1, "likes" : 3, "addedAt" : ISODate("2014-10-15T09:52:14.661Z") }

现在,我想下面的摘要:

  1. 获取的(喜欢 - 不喜欢)的差异对于用户X
  2. 获取DIFF用户X进入商店的(喜欢 - 不喜欢)Y
  3. 将用户X的差异(喜欢不喜欢)分为商店Y和商品Z

对于#1,我提出:

​​

林”得到适当的结果:

[ { “_id”: “542ea90fbb1e37b09f660980”, “rankDiff”:2 }]

但是当我试图得到#2:

[ 
    {$group: {_id: '$user', rankDiff: {$sum: {$subtract: ['$likes', '$dislikes']}}}}, 
    {$match : { _id: 'X'}, store: 'Y'} 
], 

或者通过获得#3:

[ 
    {$group: {_id: '$user', rankDiff: {$sum: {$subtract: ['$likes', '$dislikes']}}}}, 
    {$match : { _id: 'X'}, store: 'Y', product: 'Z'} 
], 

没有结果的回报。

有人可以帮助我吗?我做错了什么?

p.s.并全部由猫鼬也可直接与Robomongo通过我的MongoDB实例

回答

0

发现它时,quesry语法应为:

[ 
    {$match : { user: 'X', store: 'Y', product: 'Z'}, 
    {$group: {_id: '$user', rankDiff: {$sum: {$subtract: ['$likes', '$dislikes']}}}} 
] 

而现在是工作的罚款。

谢谢!