如何保留 $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 的顺序为您提供结果集(假设您对所有查询的 _ids 都有匹配项)。它甚至更便宜,因为它会使用索引。

谈到索引:如果您按另一个字段排序,则应该有一个包含该字段的索引。因此,如果您有类似的查询

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 查询的游标顺序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HashMap 中保留插入顺序? [复制]

如何链接 Django 查询集以保留单个顺序

如何在 JavaScript 中反转数组,同时保留原始数组的原始值? [复制]

R - 使用匹配运算符时保留顺序 (%in%)

访问大型 numpy 数组,同时保留其顺序

什么叫半保留复制?有何特点?