在查询中执行$时,Mongo是否确保了光标的顺序?
说这是我的问题:
db.collection.find({"_id":{"$in":["a","b","c"]}});
如果有三个与此查询匹配的文档,预计其订单如何? 查询订单?还是插入订单?还是修改了订单?或者一些随机顺序?
答案 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上的默认索引将用于加速此排序,因此性能成本会很低。