无法在mongodb

时间:2017-04-04 09:06:48

标签: mongodb mongodb-query aggregation-framework

db.school.find({ "merchant" : "cc8c0421-e7fc-464d-9e1d-37e168b216c3" })

这是来自该查询的学校集合的示例文档:

    { 
        "_id" : ObjectId("57fafasf2323232323232f57682cd42"), 
        "status" : "wait", 
"merchant" : "cc8c0421-e7fc-464d-9e1d-37e168b216c3",
        "isValid" : false, 
    "fields" : { "schoolid" : {
            "value" : "2323232", 
            "detail" : {
                "revisedBy" : "teacher", 
                "revisionDate" : ISODate("2015-06-24T09:22:44.288+0000")
            }, 
            "history" : [

            ]
        }}
    }

我想看看哪个有学生。所以我这样做:

db.school.aggregate([
{$match:{  "merchant" : "cc8c0421-e7fc-464d-9e1d-37e168b216c3"
  { $group: {
    _id: { fields.schoolid.value: "$fields.schoolid.value" },  
    count: { $sum: 1 } 
  } }, 
  { $match: { 
    count: { $gte: 2 } 
  } },
  { $sort : { count : -1} },
  { $limit : 10 }
]);

但它会出错。

许多行存在很多错误

我试着这样做

_id: { "fields.schoolid.value": "$fields.schoolid.value" }, 

或 _id:{'fields.schoolid.value':“$'fields.schoolid.value'”},

但没有奏效。我可以使用它吗?

1 个答案:

答案 0 :(得分:1)

根据您提供的文档,没有fields字段,因此小组阶段无法运行。您的查询应该是:

db.school.aggregate([
  { $match: {  "merchant" : "cc8c0421-e7fc-464d-9e1d-37e168b216c3"}},
  { $group: {
    _id: { value: "$fields.schoolid.value" },  
    count: { $sum: 1 } 
  } }, 
  { $match: { 
    count: { $gte: 2 } 
  } },
  { $sort : { count : -1} },
  { $limit : 10 }
]);

另请注意,fields.schoolid.value不是有效的字段名称,您需要在“”中将其包围或删除“。”