我希望写一个简单的pymongo查询来找到' (如果存在)或'插入(如果不存在)并返回对象。
find_one_and_update + upsert似乎做了我想做的事。
我在db.counters中有一个单独的计数器,它跟踪我(家庭)的唯一自动增量ID。
以下代码按预期工作,如果'系列'尚不存在,然后它插入并返回' family_id' (int),如果确实存在,则返回' family_id'。
family = db.family.find_one_and_update(
{ "external_cohort_id": external_cohort_id, "external_family_id": external_family_id },
{ "$setOnInsert": { "external_cohort_id": external_cohort_id,
"external_family_id": external_family_id,
"family_id": self.get_next_seq("ir-family") }},
projection={'family_id': True, '_id': False},
upsert=True,
new=True,
return_document=pymongo.ReturnDocument.AFTER
)
显而易见的问题是始终会评估self.get_next_seq(" ir-family"),每次都会自动递增我的计数器。我只想INC下一个家庭_id'在柜台中,仅在插入时,不是针对每个请求。
有更简单的方法吗?我不相信将其拆分为多个查询将能够处理并发更新。