List 字段中的 Mongoengine String Field 使唯一
Mongoengine String Field in List field make unique
我为 API 服务器使用 mongoengine 和 flask-restplus。
我的模型来了
from datetime import datetime
from mongoengine import *
from config import DB_NAME
connect(DB_NAME)
class Board(Document):
d = datetime.now()
date = "{}-{}-{}".format(d.year, d.month, d.day)
no = SequenceField()
title = StringField(required=True)
body = StringField(required=True)
tags = ListField(StringField(unique=True))
password = StringField(required=True)
created_at = DateTimeField(default=date)
updated_at = DateTimeField(default=date)
我定义了tags = ListField(StringField(unique=True))
.
因为文章不能有重复的标签。
插入标签代码在这里。
tag = ~some user input here~
article = Board.objects.get(no=article_no)
article.tags.append(tag)
article.save()
但是当我插入重复的数据时,它存储了两次数据。
我想 tags
有不同的数据。
为什么 unique=True
不起作用?
这个问题有什么解决办法吗?
这是一个 explanation why does it not work. As a workaround you could use $addToSet
operator provided by Mongo. It is also implemented in Mongoengine
(docs),示例用法如下所示
Board.objects(no=article_no).update_one(add_to_set__tags=tag)
其中标签可以是字符串或字符串列表
我为 API 服务器使用 mongoengine 和 flask-restplus。
我的模型来了
from datetime import datetime
from mongoengine import *
from config import DB_NAME
connect(DB_NAME)
class Board(Document):
d = datetime.now()
date = "{}-{}-{}".format(d.year, d.month, d.day)
no = SequenceField()
title = StringField(required=True)
body = StringField(required=True)
tags = ListField(StringField(unique=True))
password = StringField(required=True)
created_at = DateTimeField(default=date)
updated_at = DateTimeField(default=date)
我定义了tags = ListField(StringField(unique=True))
.
因为文章不能有重复的标签。
插入标签代码在这里。
tag = ~some user input here~
article = Board.objects.get(no=article_no)
article.tags.append(tag)
article.save()
但是当我插入重复的数据时,它存储了两次数据。
我想 tags
有不同的数据。
为什么 unique=True
不起作用?
这个问题有什么解决办法吗?
这是一个 explanation why does it not work. As a workaround you could use $addToSet
operator provided by Mongo. It is also implemented in Mongoengine
(docs),示例用法如下所示
Board.objects(no=article_no).update_one(add_to_set__tags=tag)
其中标签可以是字符串或字符串列表