db.numbers.find().sort( { a : 1, b : 1, c : 1 })
如果我执行此命令,MongoDB将按属性'a'对数字集合进行排序,如果'a'在两个文档上相同,它将按'b'属性对它们进行排序,如果它也是相同的,它将继续'C'。我希望我做对了,如果没有,请纠正我。 但是当它只是一个JS对象时,它如何首先选择'a'属性?它是否使用for(var propr in ...)迭代对象属性进行迭代,并且首先排序的是第一个按?排序?
答案 0 :(得分:3)
在内部,MongoDB不使用JSON,使用BSON。虽然JSON在技术上是无序的,但BSON(按specification)订购。这就是MongoDB如何知道在{a:1,b:1,c:1}中键被排序为“a,b,c”:底层实现也是有序的。
答案 1 :(得分:1)
正如@Sammaye在评论中发布的那样,必须在创建JavaScript词典时考虑到关键优先级。
因此,如果您这样做:
db.numbers.find().sort({
a: 1,
b: 1,
c: 1
});
您的结果将先按a
排序,然后按b
排序,再按c
排序。
但是,如果你这样做:
db.numbers.find().sort({
c: 1,
a: 1,
b: 1
});
您的结果将先按c
排序,然后按a
排序,再按b
排序。
答案 2 :(得分:0)
使用你提到的那些键:
db.numbers.find().sort({
a: 1,
b: 1,
c: 1
});
MongoDB使用属性a,b和c进行排序。
基本上,MongoDB从数据文件(CMIIW)的开头进行扫描。因此,如果MongoDB找到两个或多个与您的文档具有相同密钥的文档(a,b和c),它将首先打印在数据文件中找到的第一个文档。