我有一个db,有3000个值,每个值包含大约10个字段,现在当我尝试按特定字段对值进行排序时,它只排序到一个限制并显示一个值。 就像在Robomongo这里我试图对一个名为NET_TURNOV的值进行排序,你可以在照片9990中看到它 我使用的命令是:
db.getCollection('col').find({}).sort({"NET_TURNOV": -1})
答案 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){});