在我的模型中,我有一个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 重新启动序列字段,因为它接受了可调用,但我没有'弄明白了。
答案 0 :(得分:0)
我解决了问题,改变了我的方法。 看看mongoengine如何处理SequenceField:
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开始。