在Mongo中保持$in查询中使用的列表顺序[重复]

Posted

技术标签:

【中文标题】在Mongo中保持$in查询中使用的列表顺序[重复]【英文标题】:Keep the order of list used in $in query in Mongo [duplicate] 【发布时间】:2015-03-14 00:17:53 【问题描述】:

我有如下查询

    query = PhotoLocation.query.filter(photo_location_filters)
    photo_locations = yield query.find()
    id_list = [i.photo_id for i in photo_locations]

    photo_filters = 
    photo_filters.update('_id': '$in': id_list)
    photo_filters.update(
        "has_images": True,
        "is_hidden": 
            "$ne": True
                
            )
    query = Photo.query.filter(photo_filters).limit(limit)

$in 查询后我失去了 id_list 的顺序。有没有办法在下面的查询中保持 id_list 的顺序?

【问题讨论】:

【参考方案1】:

不使用$in - 有一个功能请求SERVER-7528。

如果您使用的是 MongoDB 2.4 或更早版本,则切换到 $or 即可:

db.filters.find( "_id" :  "$in" : [1, 2, 3]  )

进入

db.filters.find( "$or" : [
     "_id" : 1 ,
     "_id" : 2 ,
     "_id" : 3 
] )

这在 MongoDB 2.6 中不再适用。

【讨论】:

我实际上以为我在不久前的那个问题的 cmets 中发布了一个指向 couple of working solutions 的链接。这似乎比仅仅从不再有效的问题中复制一些东西要好。

以上是关于在Mongo中保持$in查询中使用的列表顺序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何保持 Spring Data JPA 或 Hibernate 中“in”子句中提供的顺序 [重复]

python删除列表中的重复元素并保持相对顺序不变

消除列表中重复项的最佳方法,但保持先前的相对顺序 [重复]

MongoDB 使用 Async.js 与 $in 保持顺序 [重复]

MongoDB 使用 Async.js 与 $in 保持顺序 [重复]

如何从 Python 列表中删除重复项并保持顺序? [复制]