2015-11-08 1 views
3

Я пытаюсь получить объяснение из довольно простого запроса. Он использует коллекцию сообщений со следующей схемой:

> 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 
> 
+0

Эта версия MongoDB вы используете? – chridam

+0

@chridam v3.0.7 – Landeeyo

ответ

5

От docs:

Не следует смешивать формы запроса. Если вы используете формат $query, не добавляйте методы курсора на find(). Для изменения запроса используйте мета-запрос , например $explain.

Таким образом, следующие две операции эквивалентны:

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

Так что в вашем случае, как $explain оператор устарела начиная с версии 3.0, используйте последнюю форму из запросов, как:

db.posts.find({}).sort({ "CreatedAtUtc" : -1 }).explain(); 

 Смежные вопросы

  • Нет связанных вопросов^_^