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 } })