Mongodb 当文档不是';t不存在并在存在时更新
插入这个Mongodb 当文档不是';t不存在并在存在时更新,mongodb,pymongo,Mongodb,Pymongo,插入这个 db.test.insertMany([{"_id":"T1","us":"a11","jp":"b21"},{"_id":"T2","us":"a12","jp":"b22"},{"_id":"T3","us":"a13","jp":"b23"},{"_id":"T4","us":"a14","jp":"b24"}]) 我的数据看起来像 { "_id" : "T1", "us": "a11", "jp": "b21" } { "_id" : "T2", "us": "a12"
db.test.insertMany([{"_id":"T1","us":"a11","jp":"b21"},{"_id":"T2","us":"a12","jp":"b22"},{"_id":"T3","us":"a13","jp":"b23"},{"_id":"T4","us":"a14","jp":"b24"}])
我的数据看起来像
{ "_id" : "T1", "us": "a11", "jp": "b21" }
{ "_id" : "T2", "us": "a12", "jp": "b22" }
{ "_id" : "T3", "us": "a13", "jp": "b23" }
{ "_id" : "T4", "us": "a14", "jp": "b24" }
我有一个键列表和一个键值列表
pks=['T1', 'T2']
kvs=[{"us": "a88"}, {"us": "a99"}]
如果我的文档中有其他密钥,例如:“cn”、“uk”,kvs将更改为
kvs=[{"jp": "b55"}, {"jp": "b99"}]
kvs列表中的密钥将相同。但下次可能会有所改变
使用kvs更新pks中的if_id,然后更改us
的值,
或者从其id不在pks中的所有文档中删除us
这将导致
{ "_id" : "T1", "us": "a88", "jp": "b21" }
{ "_id" : "T2", "us": "a99", "jp": "b22" }
{ "_id" : "T3", , "jp": "b23" }
{ "_id" : "T4", , "jp": "b24" }
有我可以使用的API吗
怎么办
或者,如果问题难以解决,则更改kvs
或pks
即可
提前感谢。如果您不关心性能 这是我的答案(pymongo)
pks=['T1', 'T2']
kvs=[{"us": "a88"}, {"us": "a99"}]
for i in range(len(pks)):
db.test.update_many( {'$or': [{'_id': pks[i]}, {'cn': pks[i]} ]},
{ '$set': { list(kvs[i].keys())[0]: list(kvs[i].values())[0] } })
db.test.update_many({'$and': [{'_id': {'$nin': pks}}, {'cn': {'$nin': pks}}]},
{'$unset': { list(kvs[i].keys())[0] : 1 } })