> for(var i=0;i<10;i++) db.t.insert({_id:i})
> db.t.find()
{ "_id" : 0 }
{ "_id" : 1 }
{ "_id" : 2 }
{ "_id" : 3 }
{ "_id" : 4 }
{ "_id" : 5 }
{ "_id" : 6 }
{ "_id" : 7 }
{ "_id" : 8 }
{ "_id" : 9 }
> db.t.find().sort({_id:-1}).skip(1).limit(1)
{ "_id" : 8 }
> db.t.find().skip(1).sort({_id:-1}).limit(1)
{ "_id" : 8 }
> db.t.find().skip(1).limit(1).sort({_id:-1})
{ "_id" : 8 }
都是返回一样的结果,奇怪么?
当你调用find方法的时候,shell并不会立刻去查询数据库,直到你真正请求结果的时候才发送查询,这样你可以在实际执行查询之前,追加一些其他的选项,游标的这些方法几乎都是返回游标本身,所以你可以按任意顺序链入这些方法,所以以上三个查询是等价的。
引申:
MongoDB 字段比较的顺序
如:
db.c.find().sort({username : 1, age : -1})
MongoDB处理不同的类型的数据是有顺序的.有时候一个键的值可能是多种类型的,如:整数,布尔型,字符串或null.如果对这种混合类型的键进行排序,其排序顺序从小到大如下:
1. Minimum value
2. null
3. Numbers (integers, longs, doubles)
4. Strings
5. Object/document
6. Array
7. Binary data
8. Object ID
9. Boolean
10. Date
11. Timestamp
12. Regular expression
13. Maximum value
最小值,null,数字,字符串,对象/文档,数组,二进制数据,对象id,布尔型,日期型,时间戳,正则表达式,最大值.