它们是相同的,事实上$orderby 的文档页面实际上主要讨论的是提供的sort() 函数。
这些query modifiers 允许您在不使用功能访问器的情况下添加查询部分确实存在,但是将这两者混合在一起存在错误,因此我建议您选择查询修饰符或功能方法并坚持使用那个选项。
在尝试提供示例代码时,当我再次查看您的问题时,我还发现了另一件事。您提供:
db.collection.findOne({"$query":{},"$orderby":{ "_id": -1 }})
但要注意的是:
db.collection.findOne({}).sort({ "_id":-1})
实际产生:
2014-07-31T04:59:50.183-0700 TypeError: Object [object Object] has no method '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 支持查询修饰符,而函数访问器则不支持,这可能是使用查询修饰符的原因。