当前位置: 首页 > 知识库问答 >
问题:

Mongo-具有多个条件的聚合

甄越
2023-03-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","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、 这一切都是由Mongoose完成的,但也通过我的MongoDB实例直接与Robomongo合作

共有1个答案

史超英
2023-03-14

找到后,quesry语法应为:

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

现在它可以正常工作了。

谢谢

 类似资料:
  • 我尝试在数据帧“df_energy”中添加一个新的列“energy_class”,如果“consumpion_energy”值为 有什么办法可以帮我吗? 先谢谢你

  • 问题内容: 我有以下文件- 在这种情况下,数组可以具有多个元素。当我通过API执行搜索时,理想情况下,我会传递类似于请求正文中的数组- 我有一个结构来接收和解码此信息- 我还可以对各种对象执行mongodb 操作,并且只有当它们全部匹配时,才返回文档。这里的问题是数组中的元素数量不固定。我需要能够发送 并检索所有匹配的文档(而不仅仅是一个)。 我尝试使用for循环来创建可变大小,具体取决于接收作为

  • 问题内容: 我想知道是否可能有这样的事情: 知道项目是通过请求接收的JSON容器,因此这就是为什么我使用键值方法的原因。 谢谢 我之所以问是因为我尝试使用Google进行谷歌搜索,但是我唯一能得到的结果是,但是我必须使用。 问题答案: 你当然可以。就像是: HTML JS 演示小提琴

  • 我在Amazon DynamoDB表分区键和范围键。 表结构 现在我想使用带有多个扫描条件的C#库从表中检索数据。 HashKey=123 有什么方法可以使用c#dynamoDB API实现这一点吗?请帮忙

  • 问题内容: 我有2张桌子: 表: 表: 现在,我想获取所有位置并过滤两个属性: 我正在尝试构造一些查询,如下所示: …但是仍然无法得到我所需要的。 问题答案: 经过几个小时的合并和尝试,我终于做到了: 我太接近了,因此将所有过滤条件都移至。

  • 问题内容: 我有一个变量。 我想呼应,如果等于任何下列值,,,,或。有没有办法通过像?? 这样的单个语句来做到这一点? 问题答案: 我认为,使用“ Or”代替“ And”会有所帮助