如何使用 PyMongo 有条件地从一个集合中复制字段并将它们添加到 MongoDB 中的另一个集合?
How to conditionally copy fields from one collection and add them to another in MongoDB with PyMongo?
我在 MongoDB 中有两个合集,分别是 collection_A 和 collection_B。
基本上,我想在给定集合 A 中的条件的情况下从集合 B 复制一个字段,但我不太确定如何通过 PyMongo 执行此操作。
集合模式:
collection_A
{
"ID": ObjectId(1234567),
"match": "yes"
}
collection_B
{
"B_ID": 1234567,
"add_field": "field_name"
}
在伪代码中,我的目标是:
if collection_A match = "yes":
loop through records
if collection_A ID = collection_B B_ID:
add "add_field": "field_name" field to collection_A
我目前拥有的:
values = collection_A.find({"match": "yes})
for doc in values:
TO-DO
关于如何通过 PyMongo 执行此操作,我已经四处查看了很多,但找不到太多。如果有人可以帮助我解决这个问题,或者指导我找到有用的链接,那将会很有帮助。谢谢
此示例将与 ID 匹配的所有必填字段从 B 复制到 A。评论解释了每个步骤。
for a_record in db.collection_A.find({'match': 'yes'}): # Loop through collection A based on filter
b_record = db.collection_B.find_one({'B_ID': a_record.get('ID')}, {'_id': 0, 'add_field': 1}) # Lookup corresponding record in Collection B
if b_record is not None: # B record will be None if no match
db.collection_A.update_one({'_id': a_record['_id']}, {'$set': b_record}) # Update A with the value from B
else:
db.collection_A.update_one({'_id': a_record['_id']}, {'$set': {'add_field': None}})
使用数据的工作示例:
from pymongo import MongoClient
db = MongoClient()['mydatabase']
db.collection_A.insert_one({
"ID": 1234567,
"match": "yes"
})
db.collection_B.insert_one({
"B_ID": 1234567,
"add_field": "field_name"
})
for a_record in db.collection_A.find({'match': 'yes'}): # Loop through collection A based on filter
b_record = db.collection_B.find_one({'B_ID': a_record.get('ID')}, {'_id': 0, 'add_field': 1}) # Lookup corresponding record in Collection B
if b_record is not None: # B record will be None if no match
db.collection_A.update_one({'_id': a_record['_id']}, {'$set': b_record}) # Update A with the value from B
print(list(db.collection_A.find({})))
打印:
[{'_id': ObjectId('5fc555172bc0555f17ccb918'), 'ID': 1234567, 'match': 'yes', 'add_field': 'field_name'}]
我在 MongoDB 中有两个合集,分别是 collection_A 和 collection_B。
基本上,我想在给定集合 A 中的条件的情况下从集合 B 复制一个字段,但我不太确定如何通过 PyMongo 执行此操作。
集合模式:
collection_A
{
"ID": ObjectId(1234567),
"match": "yes"
}
collection_B
{
"B_ID": 1234567,
"add_field": "field_name"
}
在伪代码中,我的目标是:
if collection_A match = "yes":
loop through records
if collection_A ID = collection_B B_ID:
add "add_field": "field_name" field to collection_A
我目前拥有的:
values = collection_A.find({"match": "yes})
for doc in values:
TO-DO
关于如何通过 PyMongo 执行此操作,我已经四处查看了很多,但找不到太多。如果有人可以帮助我解决这个问题,或者指导我找到有用的链接,那将会很有帮助。谢谢
此示例将与 ID 匹配的所有必填字段从 B 复制到 A。评论解释了每个步骤。
for a_record in db.collection_A.find({'match': 'yes'}): # Loop through collection A based on filter
b_record = db.collection_B.find_one({'B_ID': a_record.get('ID')}, {'_id': 0, 'add_field': 1}) # Lookup corresponding record in Collection B
if b_record is not None: # B record will be None if no match
db.collection_A.update_one({'_id': a_record['_id']}, {'$set': b_record}) # Update A with the value from B
else:
db.collection_A.update_one({'_id': a_record['_id']}, {'$set': {'add_field': None}})
使用数据的工作示例:
from pymongo import MongoClient
db = MongoClient()['mydatabase']
db.collection_A.insert_one({
"ID": 1234567,
"match": "yes"
})
db.collection_B.insert_one({
"B_ID": 1234567,
"add_field": "field_name"
})
for a_record in db.collection_A.find({'match': 'yes'}): # Loop through collection A based on filter
b_record = db.collection_B.find_one({'B_ID': a_record.get('ID')}, {'_id': 0, 'add_field': 1}) # Lookup corresponding record in Collection B
if b_record is not None: # B record will be None if no match
db.collection_A.update_one({'_id': a_record['_id']}, {'$set': b_record}) # Update A with the value from B
print(list(db.collection_A.find({})))
打印:
[{'_id': ObjectId('5fc555172bc0555f17ccb918'), 'ID': 1234567, 'match': 'yes', 'add_field': 'field_name'}]