如何保留$in查询的游标顺序?
问题的原因是在没有排序操作的情况下,返回的结果将按照自然顺序返回。如果需要按照特定的顺序返回结果,需要明确地指定排序操作。解决方法是在查询语句中添加排序操作,并创建相应的索引。
具体的解决方法如下:
对于需要按照"_id"字段的顺序返回结果的查询,可以使用以下代码:
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})
这个索引需要包含"_id"和"foo"字段,并且按照相应的顺序进行排序,以反映查询中键的顺序。
在这种情况下,排序的顺序以及索引中键的顺序都非常重要,需要确保它们与查询中键的顺序一致。