group_id

时间:2017-08-22 10:35:18

标签: mongodb mongodb-query

这是我的问题:在我的MongoDB数据库中,我有一个包含如下消息的集合:

{
  'id': 1,
  'message': 'Message 1',
  'groups': [1],
  'readBy': ['cust1','cust2'],
  'status': '1'
}
{
  'id': 2,
  'message': 'Message 2',
  'groups': [1],
  'readBy': ['cust2'],
  'status': '1'
}
{
  'id': 3,
  'message': 'Message 3',
  'groups': [2],
  'readBy': ['cust2','cust1'],
  'status': '1'
}
{
  'id': 4,
  'message': 'Message 4',
  'groups': [2],
  'readBy': ['cust2'],
  'status': '1'
}
{
  'id': 5,
  'message': 'Message 5',
  'groups': [2],
  'readBy': ['cust2'],
  'status': '1'
}

我为客户提供了另一个集合,因为我维护了组ID。 'cust1'是群组ID = [1,2]的一部分。 我想要cust1无法读取消息的总计数。 在上述情况下,计数应为2

我尝试使用以下查询,但它返回未读消息总数。

db.Messages.aggregate(
   {$unwind : "$groups" },
   {$match:{ 
     "groups": {
            "$in": ["1","2"]
        }, 
        "status": "1",
        "readBy": {
            "$ne": "cust1"
        }
   }},
   {$group:{_id:null,count:{$sum:1}}}
).pretty()

1 个答案:

答案 0 :(得分:0)

以下查询满足上述功能。

db.Messages.aggregate(
   {$unwind : "$groups" },
   {$match:{ 
     "groups": {
            "$in": ["1","2"]
        }, 
        "status": "1",
        "readBy": {
            "$ne": "cust1"
        }
   }},
   {$group:{_id:"$groups"}},
   {$group:{_id:null,count:{$sum:1}}}
)