我在集合中有多个文档。文档包含_id
和transaction_id
。在大多数文档中,_id
与transaction_id
相同。我必须检查是否有任何特定transaction_id
的文档具有不匹配的_id
。为此,我使用以下应用
all_trans_doc_list = list(tc_coll.find({})) # Getting all docs from collection
for transaction_id in transaction_list:
found = False
for trans in all_trans_doc_list:
if str(trans['_id']) == str(transaction_id ):
found = False
else:
found = True
上述方法的问题是,例如,我将事务列表作为[12345, 67890]
。因此,对于transaction_id[12345]
和trans['_id']
匹配,So find变为False,但对于另一个trans['_id']
,它变为True,因此这种方法是不正确的。有人能建议一个查询,它可以列出_id
&transaction_id
不匹配。请帮忙。感谢
您可以在查询中使用$expr
聚合表达式运算符和$ne
运算符,使用$in
、在提供的ID列表中选择不匹配的文档及其transaction_id
all_trans_doc_list = tc_coll.find({
'transaction_id': { '$in': transaction_list },
'$expr': { '$ne': ['$transaction_id', '$_id'] }
})