我有一個類似于此表的唯一鍵的串列,我需要檢索具有這些 pk 的表的所有記錄:
lista_pks = [
{'pers_id': '00002', 'cod': '01'},
{'pers_id': '00003', 'cod': '01'},
{'pers_id': '00014', 'cod': '01'},
{'pers_id': '00015', 'cod': '01'},
{'pers_id': '00017', 'cod': '01'},
{'pers_id': '00018', 'cod': '01'},
{'pers_id': '00019', 'cod': '01'}
]
columns = {"_id":0,"pers_id":1,"cod":1, "doc":1}
database["collection_2"].find(lista_pks ,columns)
Expected:
|cod | pers_id | doc|
---------------------
|01 | 00002 | DNI|
|01 | 00003 | DNI|
|01 | 00014 | DNI|
|01 | 00015 | DNI|
|01 | 00017 | DNI|
|01 | 00018 | DNI|
|01 | 00019 | DNI|
到目前為止,我只需要按具體值進行過濾,但現在我需要復制這樣的東西,但我不知道如何做到:
where (pers_id = '00000002' and cod = '0001') or (pers_id = '00000003' and cod = '0001')
or (pers_id = '00000014' and cod = '0001') or (pers_id = '00000015' and cod = '0001')
or (pers_id = '00000017' and cod = '0001') or (pers_id = '00000018' and cod = '0001')
or (pers_id = '00000019' and cod = '0001')
編輯:我創建了一個這樣的函式:
or_cond = {}
and_cond= list()
for dict_i in lista_pks:
query_aux = {}
query_aux['$and'] = [dict_i ]
and_cond.append(query_aux)
or_cond['$or'] = and_cond
Output:
{'$or': [{'$and': [{'pers_id': '00002', 'cod': '01'}]}, {'$and': [{'pers_id': '00003', 'cod': '01'}]}, {'$and': [{'pers_id': '00014', 'cod': '01'}]}, {'$and': [{'pers_id': '00015', 'cod': '01'}]}, {'$and': [{'pers_id': '00017', 'cod': '01'}]}, {'$and': [{'pers_id': '00018', 'cod': '01'}]}, {'$and': [{'pers_id': '00019', 'cod': '01'}]}]}
它有效,但我不知道這個解決方案是否是最好的
uj5u.com熱心網友回復:
如果您使用的是 pymongo
result = collection.aggregate([
{
"$match": {
"pers_id" : {
"$in": ["00000017", "00000016"... ]
},
"cod": {
"$in": ["0001"]
}
}
}
])
您也可以使用find而不是聚合
uj5u.com熱心網友回復:
MongoDB 中的過濾器and默認為ed,因此您可以將查詢簡化為:
db.mycollection.find({'$or': [{'pers_id': '00002', 'cod': '01'},
{'pers_id': '00003', 'cod': '01'},
{'pers_id': '00014', 'cod': '01'},
{ ... <etc> ...}]})
或者更好:
db.mycollection.find({'$or': lista_pks})
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359654.html
