首页 > 解决方案 > 列表字段中的 Mongoengine 字符串字段使唯一

问题描述

我将 mongoengine 和 flask-restplus 用于 API Server。

我的模型在这里。

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

有没有关于这个问题的解决方案?

标签: mongoengine

解决方案


这是一个解释为什么它不起作用。作为一种解决方法,您可以使用$addToSetMongo 提供的运算符。它也在Mongoengine( docs ) 中实现,示例用法如下所示

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

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


推荐阅读