如何保留 $in 查询的游标顺序? [复制]
Posted
技术标签:
【中文标题】如何保留 $in 查询的游标顺序? [复制]【英文标题】:How to retain cursor order for $in query? [duplicate] 【发布时间】:2016-05-26 04:15:35 【问题描述】:Mongo在执行$in查询时是否保证游标的顺序?
说这是我的查询:
db.collection.find("_id":"$in":["a","b","c"]);
如果有三个文档匹配这个查询,它的顺序应该是怎样的? 查询顺序?还是插入订单?还是修改顺序?还是一些随机顺序?
【问题讨论】:
感谢宏……它是重复的……得到了解决…… 【参考方案1】:实际上,没有附加排序操作,它们将在natural order中返回。
一般来说,如果您需要按特定顺序返回它们,您应该明确说明:
db.collection.find("_id":"$in":["a","b","c"]).sort(_id:1);
应该按 a、b、c 的顺序为您提供结果集(假设您对所有查询的 _id
s 都有匹配项)。它甚至更便宜,因为它会使用索引。
谈到索引:如果您按另一个字段排序,则应该有一个包含该字段的索引。因此,如果您有类似的查询
db.collection.find("_id":"$in":["a","b","c"]).sort(foo:-1);
应该有一个像这样创建的索引
db.collection.createIndex(_id:1,foo:-1)
今天的 MongoDB 口头禅
订单很重要。
在这种情况下,甚至两次:排序顺序和索引内键的顺序,这需要反映查询中键的顺序。
【讨论】:
【参考方案2】:订单未定义。
通常你会得到看起来像插入订单的东西,但你不能依赖这个。各种事件都可能导致订单混乱。
如果您希望对结果进行排序,请明确排序。当你.sort(_id:1)
时,会使用_id 上的默认索引来加速这种排序,因此性能成本会很低。
【讨论】:
以上是关于如何保留 $in 查询的游标顺序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章