Ответ 1
Они одинаковы, и на самом деле страница документации $orderby
фактически говорит в основном о функции sort()
, которая предоставляется.
Эти модификаторы запросов, которые позволяют добавлять разделы запроса без использования функциональных аксессуаров, существуют, но есть ошибка, смешивающая эти два вместе, поэтому я бы рекомендовал вы выбираете либо модификаторы запросов, либо функциональные методы и придерживаетесь этой опции.
При попытке предоставить примерный код я также обнаружил еще одну вещь, когда снова посмотрел на ваш вопрос. Вы предоставляете:
db.collection.findOne({"$query":{},"$orderby":{ "_id": -1 }})
Но хорошо отметить, что:
db.collection.findOne({}).sort({ "_id":-1})
Фактически производит:
2014-07-31T04: 59: 50.183-0700 TypeError: Object [object Object] не имеет метода 'sort'
и, как вы можете видеть здесь, в моем тестовом наборе данных:
> db.rooms.find()
{ "_id" : ObjectId("53ad206e1d8f2d8351182830"), "id" : 1, "from" : ISODate("2014-06-26T00:00:00Z"), "to" : ISODate("2014-06-28T00:00:00Z") }
{ "_id" : ObjectId("53ad276f1d8f2d8351182831"), "id" : 1, "from" : ISODate("2014-06-24T00:00:00Z"), "to" : ISODate("2014-07-01T00:00:00Z") }
{ "_id" : ObjectId("53ad28ad1d8f2d8351182832"), "id" : 1, "from" : ISODate("2014-06-20T00:00:00Z"), "to" : ISODate("2014-06-28T00:00:00Z") }
{ "_id" : ObjectId("53ad28c61d8f2d8351182833"), "id" : 1, "from" : ISODate("2014-06-20T00:00:00Z"), "to" : ISODate("2014-07-03T00:00:00Z") }
{ "_id" : ObjectId("53ad29971d8f2d8351182834"), "id" : 1, "from" : ISODate("2014-06-20T00:00:00Z"), "to" : ISODate("2014-06-21T00:00:00Z") }
ответ на самом деле правильный:
> db.rooms.findOne({ "$query":{}, "$orderby":{ "_id": -1 }})
{
"_id" : ObjectId("53ad29971d8f2d8351182834"),
"id" : 1,
"from" : ISODate("2014-06-20T00:00:00Z"),
"to" : ISODate("2014-06-21T00:00:00Z")
}
Поэтому интересно отметить, что модификаторы запросов поддерживаются findOne
, где в качестве функциональных аксессуаров нет, что может быть причиной использования модификаторов запросов.