mongo使用$in查询结果的排序问题。-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

mongo使用$in查询结果的排序问题。

2016-06-29 10:59:55 3563 1

最近的项目使用mongo作为数据库,遇到了一个问题。

db.col_content.find({'nodeID':{$in:[d,c,b,a]}})
使用这样的查询的时候,查询的结果是按照自然排序的,即:

{a.....},
{b.....},
{c.....},
{d.....},
不是在传值的时候的{d,c,b,a};
我的猜测是,$in的操作是按照自然排序遍历数据,依次跟$in里面的数据进行比较,所以才会最终的数据按照自然排序,但是现在的业务需求需要按照传值的顺序,难道只能代码层实现排序了吗?
我用的是PHP,不知道有没有比较简单的方法来进行排序。
请指教。

刚才看到另外一个类似的问题,如果有在nodeID上加索引的话,就会根据$in的传值进行查询。我去试一试。

加了索引之后确实按照传入顺序进行排序了,但是楼下已经有人说了,这个是mongo的特性,不能作为依赖,现在只能通过代码层来实现了。

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:48:54

    我能猜测到为什么会有这样的结果:

    如果没有索引,那么做COLLSCAN是按$natural顺序遍历的,所以出来的也是自然排序;
    如果有索引,则会逐个key做IXSCAN,然后逐个放进结果集里,也就是你要的顺序。
    从编程的角度讲,这是有意义的。但是没有任何保证将来的MongoDB版本也会一直保持这样的行为。
    事实上大部分数据库在不指定排序的时候都会以随机顺序,也就是引擎认为最高效的顺序返回结果。所以即使现在最高效的顺序正好是你想要的顺序,不代表将来一直会这样。不要依赖这个功能,否则将来在某个版本升级的时候会出现非常奇怪且难以定位的问题。
    个人建议:

    如果可能,按照输入的顺序指定排序来得到正确的结果顺序。
    如果输入的顺序无法指定,在程序中自行排序。

    0 0
相关问答

1

回答

MONGO是如何支撑基于位置查询的移动类业务APP的需求的呢?

2022-04-01 13:04:59 405浏览量 回答数 1

2

回答

Python Web框架-Django以外的

2020-02-23 16:20:30 536浏览量 回答数 2

1

回答

django对数据查询结果排序怎么做,降序怎么做

2019-11-20 14:21:15 2024浏览量 回答数 1

1

回答

django 对数据查询结果排序怎么做,降序怎么做,查询大于某个字段怎么做

2019-11-20 14:17:22 1639浏览量 回答数 1

1

回答

django对数据查询结果排序怎么做,降序怎么做,查询大于某个字段怎么做

2019-11-01 15:05:27 1954浏览量 回答数 1

1

回答

请问有人知道datax mongodbreader里面的query查询语句应该写成什么格式呢?

2019-03-18 16:07:20 4231浏览量 回答数 1

1

回答

mongo磁盘扩容问题

2017-06-26 20:07:11 2965浏览量 回答数 1

1

回答

mongodb 中自带的主键如何查询并删除?

2016-02-18 15:40:34 2581浏览量 回答数 1

1

回答

MongoDB 如何根据查询结果更新数据

2016-02-14 15:04:30 2823浏览量 回答数 1

1

回答

MongoDB多层次嵌套特定查询问题

2016-02-01 13:21:39 3002浏览量 回答数 1
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载