【问题标题】:Why mongoDb sort not working?为什么mongoDb排序不起作用?
【发布时间】:2018-01-26 16:44:31
【问题描述】:

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

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

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

【问题讨论】:

  • 是的,我想当我点击 robomongo 中的查看文档时,它会显示 "NET_TURNOV":"xxxx" 中的值

标签: mongodb sorting mongo-shell


【解决方案1】:

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

数字22 大于数字9,但字符串 "22" 小于字符串"9"(因为它们是逐个字符比较的)。

数字应该存储为数字,如果您想对它们执行任何数字-y 操作,例如排序、查找最大值或添加/减去它们等。也就是说“总是”。

【讨论】:

  • 哇,谢谢,但是,如果没有存储为数字的选项,那么我该如何对其进行排序。
  • @AlpitAnand:那你就不走运了。
  • 谢谢,你帮了很多忙,我想我必须重新编码才能从头开始构建我的数据库
【解决方案2】:

在我的例子中,字段 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){});

【讨论】:

  • 我通过添加 ,exec 没有发现任何不同
猜你喜欢
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 2021-12-26
  • 2022-01-13
  • 2016-10-09
  • 1970-01-01
相关资源
最近更新 更多