【问题标题】:Mongo - aggregate with multiple conditionsMongo - 具有多个条件的聚合
【发布时间】:2014-12-12 19:34:14
【问题描述】:

我有收藏,其中包含用户在商店中的购买以及他从他的朋友那里获得的此购买的好恶。集合字段如下所示:

{
    "_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. 将用户 X 的(喜欢 - 不喜欢)差异获取到商店 Y
  3. 获取用户 X 与商店 Y 和产品 Z 的(喜欢 - 不喜欢)差异

对于#1,我做了:

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

我得到了正确的结果:

[ { “_id”:“542ea90fbb1e37b09f660980”, “排名差异”: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'}
],

没有返回结果。

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

附言全部由 Mongoose 完成,但也通过我的 MongoDB 实例直接使用 Robomongo 完成

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    找到了,查询语法应该是:

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

    现在它工作正常了。

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      相关资源
      最近更新 更多