MongoDB如何选择它将排序的第一个属性?

时间:2013-11-19 11:03:38

标签: mongodb sorting

db.numbers.find().sort( { a : 1, b : 1, c : 1 })

如果我执行此命令,MongoDB将按属性'a'对数字集合进行排序,如果'a'在两个文档上相同,它将按'b'属性对它们进行排序,如果它也是相同的,它将继续'C'。我希望我做对了,如果没有,请纠正我。 但是当它只是一个JS对象时,它如何首先选择'a'属性?它是否使用for(var propr in ...)迭代对象属性进行迭代,并且首先排序的是第一个按?排序?

3 个答案:

答案 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),它将首先打印在数据文件中找到的第一个文档。