为什么 mongoDb 排序不起作用?
Why mongoDb sort not working?
我有一个数据库,有 3000 个值,每个值包含大约 10 个字段,现在当我尝试按特定字段对值进行排序时,它只会排序到一个限制并显示一个值。
就像在 Robomongo 中一样,我正在尝试对名为 NET_TURNOV 的值进行排序,您可以在照片 9990 中看到它
我使用的命令是:
db.getCollection('col').find({}).sort({"NET_TURNOV": -1})
但是,在下一张照片中,您可以看到具有更高 NET_TURNOV 值的同一个数据库,为什么会这样。
这是下一张照片
您的 NET_TURNOV(以及所有其他数字)存储为字符串。这解释了 "weird" 排序。
数字22
大于数字9
,但字符串"22"
小于字符串"9"
(因为它们'逐个字符进行比较)。
数字应该存储为数字,如果你想对它们做任何与数字有关的事情,比如排序,或找到最大值,或者 adding/subtracting 它们等等。也就是说 "always".
在我的例子中,字段 timestamp
是一个数字 double
但不知何故 Mongo 将其解释为字符串。我不知道为什么,但是从 Mongo 3.2 升级到 3.4 后,这个消失了。
更新
好的,我终于搞定了!
错误
model.find({query},function(err, docs){
//docs sorted on OSX but not on Ubuntu
//documents are listed before the sorting happens
}).sort('timestamp');
正确
model.find({query})
.sort('timestamp')
.exec(function(err, docs){
//docs sorted on both systems
});
正确
model.find({query})
.sort('timestamp')
.then(function(docs){
//docs in right order
})
.catch(function(error){});
我有一个数据库,有 3000 个值,每个值包含大约 10 个字段,现在当我尝试按特定字段对值进行排序时,它只会排序到一个限制并显示一个值。 就像在 Robomongo 中一样,我正在尝试对名为 NET_TURNOV 的值进行排序,您可以在照片 9990 中看到它 我使用的命令是:
db.getCollection('col').find({}).sort({"NET_TURNOV": -1})
但是,在下一张照片中,您可以看到具有更高 NET_TURNOV 值的同一个数据库,为什么会这样。
这是下一张照片
您的 NET_TURNOV(以及所有其他数字)存储为字符串。这解释了 "weird" 排序。
数字22
大于数字9
,但字符串"22"
小于字符串"9"
(因为它们'逐个字符进行比较)。
数字应该存储为数字,如果你想对它们做任何与数字有关的事情,比如排序,或找到最大值,或者 adding/subtracting 它们等等。也就是说 "always".
在我的例子中,字段 timestamp
是一个数字 double
但不知何故 Mongo 将其解释为字符串。我不知道为什么,但是从 Mongo 3.2 升级到 3.4 后,这个消失了。
更新
好的,我终于搞定了!
错误
model.find({query},function(err, docs){
//docs sorted on OSX but not on Ubuntu
//documents are listed before the sorting happens
}).sort('timestamp');
正确
model.find({query})
.sort('timestamp')
.exec(function(err, docs){
//docs sorted on both systems
});
正确
model.find({query})
.sort('timestamp')
.then(function(docs){
//docs in right order
})
.catch(function(error){});