【问题标题】:在 MongoDB (Pymongo) 中使用运算符 $in 使用 ObjectId 进行查询
【发布时间】:2022-01-23 16:53:57
【问题描述】:

我有一个 ID 列表,我想根据该列表查询一个集合。我过滤的字段是id_,它是ObjectID

例子:

list = ['abcd','mnop','qrst']

我想搜索_id 在该列表中的文档:

cursor = db.find( {"_id": { "$in": list} }   )
cursor = db.find( {"_id": { "$in": ObjectId(list)} }   )

我尝试了上述两个选项,但都没有奏效。 第一个返回空,第二个抛出类型错误: TypeError: id must be an instance of (bytes, str, ObjectId), not <class 'list'>

如何更正我的代码?

【问题讨论】:

  • 你有没有试过这样的ObjectIds列表:[ ObjectId('61bde475a216f8027c1379d1'), ...]
  • 它有效。 list = [ObjectId(x) for x in list]。谢谢。随时提出问题

标签: mongodb pymongo


【解决方案1】:

正如@prasad_ 所说,需要从字符串中生成 ObjectId。

list_ = ['abcd','mnop','qrst']
list_ = [ObjectId(x) for x in list_]
cursor = db.find( {"_id": { "$in": list_} } )

所以 MongoDB 的 "$in" 操作符引用了以 ObjectId 为内容的列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 2015-03-13
    • 2020-11-05
    • 1970-01-01
    • 2018-08-18
    相关资源
    最近更新 更多