列表字段中的Mongoengine字符串字段使其唯一

时间:2018-08-20 09:29:27

标签: mongoengine

我将mongoengine和flask-restplus用于API服务器。

我的模特在这里。

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不起作用?

关于此问题有解决方案吗?

1 个答案:

答案 0 :(得分:0)

这是一个explanation为何不起作用的原因。作为解决方法,您可以使用Mongo提供的$addToSet运算符。它还在Mongoenginedocs)中实现,示例用法如下所示:

Board.objects(no=article_no).update_one(add_to_set__tags=tag)

其中标记可以是字符串或字符串列表