find_one_and_update + inc counter仅在插入时

时间:2017-06-16 02:47:20

标签: mongodb pymongo

我希望写一个简单的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'在柜台中,仅在插入时,不是针对每个请求。

有更简单的方法吗?我不相信将其拆分为多个查询将能够处理并发更新。

0 个答案:

没有答案