Mongoengine如何在新的一年后重置SequenceField?

时间:2018-06-06 17:30:33

标签: python mongodb mongoengine

在我的模型中,我有一个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 重新启动序列字段,因为它接受了可调用,但我没有'弄明白了。

1 个答案:

答案 0 :(得分:0)

我解决了问题,改变了我的方法。 看看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开始。