将 $in 查询中使用的列表顺序保持在 Mongo
Keep the order of list used in $in query in Mongo
我有如下查询
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 的顺序?
未使用 $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 中不再有效。
我有如下查询
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 的顺序?
未使用 $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 中不再有效。