mongodb - 聚合管道抛出错误 "A pipeline stage specification object must contain exactly one field."

标签 mongodb mongodb-query aggregation-framework database

db.audiofiles.aggregate({
    $match: {
        privacy: { $ne: "same" },
        date: { "$eq": "2017/04/25" },
        deleted: 0
    },
    $group: { "_id": "$to_email" }
});

我使用了 $match 但仍然显示如下管道错误。

assert: command failed: {
    "ok" : 0,
    "errmsg" : "A pipeline stage specification object must contain exactly one field.",
    "code" : 16435
} : aggregate failed

最佳答案

您需要将管道阶段放置在 array 中,即文档按顺序通过各个阶段。

db.collection.aggregate( [ { <stage> }, ... ] )

$group 管道步骤操作符应该在他们自己的对象/文档中,而不是作为 $match 的一部分 管道步骤。你聚合管道应该是

db.audiofiles.aggregate([
    /* match pipeline */
    {
        "$match": {
            "privacy": { "$ne": "same" },
            "date": { "$eq": "2017/04/25" },
            "deleted": 0
        }
    },
    /* group pipeline */
    {
        "$group": { 
            "_id": "$to_email", 
            "count": { "$sum": 1 }
        }
    }
]);

或者将管道步骤创建为对象变量,您可以将其推送到数组中,并且该数组将成为管道以用作 aggregate() 方法参数:

/* match pipeline */
var match = {
    $match: {
        privacy: { $ne: "same" },
        date: { "$eq": "2017/04/25" },
        deleted: 0
    }
},
/* group pipeline */
group = {
    $group: { 
        "_id": "$to_email", 
        "count": { "$sum": 1 }
    }
};

db.audiofiles.aggregate([match, group]);

如果您没有从上面得到任何响应,请尝试仅一步运行聚合管道:

db.audiofiles.aggregate([match]);

匹配步骤的结果将被传送到下一阶段,所以如果您没有得到任何结果,这意味着 $match 管道步骤未找到任何匹配的文档。改一些参数看看有没有结果。

关于mongodb - 聚合管道抛出错误 "A pipeline stage specification object must contain exactly one field.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43584023/

相关文章:

mongodb - mongodb 的唯一 ID

javascript - 在循环使用 Mongoose 查询时有希望 - Node Bluebird

MongoDB ReplicaSet - 当只剩下 PRIMARY 时,PRIMARY 角色降为 SECONDARY

javascript - 不使用 $project 将嵌套文档投影到根级别

MongoDB 在管道的 $project 阶段使用新的 ObjectId 生成相同的 ObjectId

c# - 无法使用mongocsharpdriver 2.7.0连接到MongoDb(使用身份验证)

database - Mongo错误QueryExceededMemoryLimitNoDiskUseAllowed

mongodb - 从mongodb中的三个集合中获取结果

Mongodb:将日期范围转换为日期数组

MongoDB聚合: remove some elements from embedded array (redact?)