【问题标题】:Can I use $in statement for two fields instead of one in mongo db?我可以在 mongodb 中对两个字段而不是一个字段使用 $in 语句吗?
【发布时间】:2021-09-10 16:15:11
【问题描述】:

我有一个字典列表,其中包含一个名为 unique_field_id 的字段,我想获取该列表中每个项目的每个文档。 一种方法是使用 for 循环并像这样调用 find_one() 查询:

my_list = [{'unique_field_id': 1}, {'unique_field_id': 2}, {'unique_field_id': 3}]
document_list = list()

for el in my_list:
    document = db.collection_name.find_one(el)
    document_list.append(document)

另一种更好更快的方法是这样做:

my_list = [{'unique_field_id': 1}, {'unique_field_id': 2}, {'unique_field_id': 3}]
my_list_values = [d['unique_field_id'] for d in my_list]
document_list = db.collection_name.find({'unique_field_id': {'$in': my_list_values}})

这对我来说很好,直到我的文档的唯一字段更改为两个字段。 现在我有一个字典列表,其中包含两个字段 unique_field_idother_unique_field_id,它们作为我文档的唯一字段一起索引。

如果我想采用第一种方法,它会是这样的:

my_list = [{'unique_field_id': 1, 'other_unique_field_id': 'a'}, {'unique_field_id': 2, 'other_unique_field_id': 'b'}, {'unique_field_id': 3, 'other_unique_field_id': 'c'}]
document_list = list()
for el in my_list:
    document = db.collection_name.find_one(el)
    document_list.append(document)

但我需要以第二种方式进行,并检查 $in 语句以获取两个字段的索引,而不是一一进行,因为它要快得多。 我该怎么做? 另外我认为这个问题有一个我不完全理解的有用答案。 Mongo $in with compound index

【问题讨论】:

    标签: mongodb mongodb-query pymongo


    【解决方案1】:

    使用$or 运算符查找命令。

    my_list = [
        {'unique_field_id': 1, 'other_unique_field_id': 'a'},
        {'unique_field_id': 2, 'other_unique_field_id': 'b'},
        {'unique_field_id': 3, 'other_unique_field_id': 'c'}
    ]
    
    document_list = list(db.collection_name.find({
        "$or": my_list
    }))
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2019-02-02
    • 2022-11-02
    相关资源
    最近更新 更多