2015-04-06 53 views
1

在我MongoDB的,我“由组”,试图一组使用骨料()功能记录和$比赛查询我使用不会选择管道中的记录。

我的数据集有子文件(关于这一点我将$匹配),它看起来像这样:

{ 
    "_id" : ObjectId("550994e21cba9597624195aa"), 
    "taskName" : "task name", 
    "taskDetail" : "task detail.", 
    "scheduledStartDate" : ISODate("2015-04-06T09:00:00.000Z"), 
    "scheduledEndDate" : ISODate("2015-04-06T11:00:00.000Z"), 
    "user" : { 
     "id" : "abcd1123", 
     "name" : "username" 
    }, 
    "status" : "Assigned" 
} 
{ 
    "_id" : ObjectId("550994e21cba9597624195aa"), 
    "taskName" : "task name", 
    "taskDetail" : "task detail.", 
    "scheduledStartDate" : ISODate("2015-04-06T09:00:00.000Z"), 
    "scheduledEndDate" : ISODate("2015-04-06T11:00:00.000Z"), 
    "user" : { 
     "id" : "abcd1123", 
     "name" : "username" 
    }, 
    "status" : "Assigned" 
} 
{ 
    "_id" : ObjectId("550994e21cba9597624195aa"), 
    "taskName" : "task name", 
    "taskDetail" : "task detail.", 
    "scheduledStartDate" : ISODate("2015-04-06T09:00:00.000Z"), 
    "scheduledEndDate" : ISODate("2015-04-06T11:00:00.000Z"), 
    "user" : { 
     "id" : "abcd1124", 
     "name" : "username" 
    }, 
    "status" : "Assigned" 
} 

我想找出的状态计数的状态类型分组的特定用户。对于用户“abcd1123”,查询,我用的是:

db.tasks.aggregate([ 
    { 
     $match : { 
      user : { id : "abcd1123" } 
     } 
    }, 
    { 
     $group: { 
      _id: "$status", 
      count: { $sum: 1 } 
     } 
    } 
]) 

上面的查询不返回任何结果,因为$匹配不把任何结果进入管道。如果我修改这样的查询:

db.tasks.aggregate([ 
    { 
     $match : { 
      user : { id : "abcd1123", name : "username" } 
     } 
    }, 
    { 
     $group: { 
      _id: "$status", 
      count: { $sum: 1 } 
     } 
    } 
]) 

它的工作原理。但我没有用户名作为输入,我只需要根据用户标识查找。

由于用户不是阵列,我不能使用$ unwind就可以了。

我该如何实现这个目标?

回答

2

你太近只能改变你的聚集查询,如下

db.collectionName.aggregate({ 
    "$match": { 
    "user.id": "abcd1123" 
    } 
}, 
{ 
    "$group": { 
    "_id": "$status", 
    "count": { 
     "$sum": 1 
    } 
    } 
}) 
+0

真棒。谢谢Yogesh。它非常完美! – Vijendran 2015-04-06 12:46:50