为什么mongoDb排序不起作用?

时间:2018-01-26 16:44:32

标签: mongodb sorting mongo-shell

我有一个db,有3000个值,每个值包含大约10个字段,现在当我尝试按特定字段对值进行排序时,它只排序到一个限制并显示一个值。 就像在Robomongo这里我试图对一个名为NET_TURNOV的值进行排序,你可以在照片9990中看到它 我使用的命令是:

db.getCollection('col').find({}).sort({"NET_TURNOV": -1})

sorting by NET_TURNOV

但是,在下一张照片中,您可以看到具有更高NET_TURNOV值的相同数据库,为什么会发生这种情况。 这是下一张照片 enter image description here

2 个答案:

答案 0 :(得分:2)

您的NET_TURNOV(和所有其他数字)存储为字符串。这解释了“怪异”的排序。

数字22大于数字9,但字符串 "22"小于字符串"9"(因为它们与字符"$set": { "operations.1.parameters.$.dummy": "foo" } 进行比较字符)。

数字应该存储为数字,如果你想对它们做任何数字的东西,比如排序,或者找到最大值,或者加/减它们等等。也就是说“总是”。

答案 1 :(得分:1)

在我的情况下,字段timestamp是一个数字double,但不知何故Mongo将其解释为字符串。我不知道为什么但是从Mongo 3.2升级到3.4之后就消失了。

更新

好的,所以我终于把它钉了!

WRONG

model.find({query},function(err, docs){
    //docs sorted on OSX but not on Ubuntu
    //documents are listed before the sorting happens
}).sort('timestamp');

CORRECT

model.find({query})
.sort('timestamp')
.exec(function(err, docs){
   //docs sorted on both systems
});

CORRECT

model.find({query})
.sort('timestamp')
.then(function(docs){
   //docs in right order
})
.catch(function(error){});