Mongoengine如何在新年后重置SequenceField?

Mongoengine how to reset SequenceField after new year?

在我的模型中,我有一个 EmbeddedDocument Number,它有一个序列字段(它不是主键),这个字段用作字符串连接部分来生成论文标题(这样字段确实需要顺序,作为业务规则)。

规则是:年开始时,序号要重新开始计数,重新从1开始计数。

例如:

...
12/30/2018 -> sequential_value = 545
12/30/2018 -> sequential_value = 546
12/31/2018 -> sequential_value = 547
01/01/2019 -> sequential_value = 1
01/01/2019 -> sequential_value = 2
...

我的模型: class Number(EmbeddedDocument): sequential_value = SequenceField(required=True)

我正在搜索是否有一种方法可以使用参数 value_decorator 来重新启动序列字段,因为它接受可调用,但我没有想到还没出来。

我已经通过改变方法解决了这个问题。 查看 mongoengine 如何处理 SequenceField:

fields.py

counter = collection.find_and_modify(query={'_id': sequence_id},
                                         update={'$inc': {'next': 1}},
                                         new=True,
                                         upsert=True)

我使用相同的方法创建了一个函数,它的功能相同,但使用 2 个 ID 和年份作为查询 ID:

next_number = collection.find_and_modify(
    query={'_id': oid+'_'+oeid+'_'+str(year)}, 
           update={'$inc': {'next': 1}},
           new=True,
           upsert=True)

所以...这样,每次创建一个对象时,我都使用此函数生成下一个序列号,当年份更改时,将创建一个新行,因此序列号将再次从 1 开始。