如何在查询中保留$的游标顺序?

时间:2016-02-15 09:55:31

标签: java mongodb

在查询中执行$时,Mongo是否确保了光标的顺序?

说这是我的问题:

db.collection.find({"_id":{"$in":["a","b","c"]}});

如果有三个与此查询匹配的文档,预计其订单如何? 查询订单?还是插入订单?还是修改了订单?或者一些随机顺序?

2 个答案:

答案 0 :(得分:1)

实际上,如果没有附加排序操作,它们将在natural order中返回。

通常,如果您需要按特定顺序返回它们,则应明确说明:

db.collection.find({"_id":{"$in":["a","b","c"]}}).sort({_id:1});

哪个应该按照a,b,c的顺序给你结果集(假设你匹配所有被查询的_id)。它甚至便宜,因为它会使用索引。

谈到索引:如果按另一个字段排序,则应该有一个包含该字段的索引。所以,如果您有像

这样的查询
db.collection.find({"_id":{"$in":["a","b","c"]}}).sort({foo:-1});

应该创建一个像

这样的索引
db.collection.createIndex({_id:1,foo:-1})

当天的MongoDB Mantra

  

订单很重要。

在这种情况下,甚至两次:索引中的排序顺序和键的顺序,需要反映查询中键的顺序。

答案 1 :(得分:0)

订单未定义。

通常你会得到看起来像插入顺序的东西,但你不能依赖它。各种事件可能导致订单混乱。

如果希望对结果进行排序,请明确对其进行排序。当您.sort({_id:1})时,_id上的默认索引将用于加速此排序,因此性能成本会很低。