MongoDb解释失败:“未知的顶级操作符:$ query”

时间:2015-11-08 15:22:24

标签: mongodb mongo-shell

我试图从非常简单的查询中获得解释。它使用以下模式的帖子集合:

> db.posts.findOne()
{
        "_id" : ObjectId("55236e6182bf196454a952b6"),
        "Content" : "wuOfCjKborHcxkoyXzXiW",
        "CreatedAtUtc" : ISODate("2014-01-18T23:59:30.023Z"),
        "Tags" : [
                "sjM",
                "Van",
                "Orm"
        ],
        "Title" : "msAQAbQwAl",
        "Author" : "yIIhato",
        "Comments" : [ ]
}

查询我想解释一下:

db.posts.find( { $query: {}, $orderby: { "CreatedAtUtc" : -1 } } )

它产生正确的结果,没有任何错误。但是当我想解释它时,它会抛出异常。我已经尝试过这些命令来解释查询:

db.posts.explain().find( { $query: {}, $orderby: { "CreatedAtUtc" : -1 } } )
db.posts.find( { $query: {}, $orderby: { "CreatedAtUtc" : -1 } } ).explain()

var cursor = db.posts.find( { $query: {}, $orderby: { "CreatedAtUtc" : -1 } } )
cursor.explain()

错误始终相同:

2015-11-08T16:20:40.137+0100 E QUERY    Error: explain failed: { "ok" : 0, "errm
sg" : "unknown top level operator: $query", "code" : 2 }
    at Error (<anonymous>)
    at Function.throwOrReturn (src/mongo/shell/explainable.js:34:19)
    at constructor.finish (src/mongo/shell/explain_query.js:188:36)
    at DBQuery.explain (src/mongo/shell/query.js:434:25)
    at (shell):1:8 at src/mongo/shell/explainable.js:34
>

1 个答案:

答案 0 :(得分:6)

来自 docs

  

不要混合查询表单。如果您使用 $problem->setExample6(str_replace(array(',', 'US$', ' '), '', $_POST["example6"])); $_POST["example6"] = $problem->getExample6(); 格式,请不要追加   游标方法到$query。要修改查询,请使用元查询   运营商,例如 find()

     

因此,以下两个操作是等效的:

$explain

因此,在您的情况下,由于 $explain 运算符自版本3.0以来已被弃用,请使用后一种形式的查询,如:

db.collection.find( { $query: { age : 25 }, $explain: true } )
db.collection.find( { age : 25 } ).explain()