使用MongoEngine保存和更新嵌套文档

时间:2018-12-31 15:29:13

标签: python mongodb flask mongoengine flask-mongoengine

我想实现此结构模型,以便在烧瓶上使用MongoEngine将数据存储在Mongodb上:

skills = [{"asm":"Assembly",
           "flag":False,
          "date": datetime},
          {"java":"Java",
           "flag":False,
           "date": datetime}]

所以我不知道如何声明和更新这种结构。 为了更新我使用的一个对象:

User.objects(skills=form.skills.data).update_one()

但是,我不知道如何一次更新更多字段。 我尝试使用下面的代码,但没有用。

now = datetime.now()
 User.objects(skills=form.skills).update_one(set__skills = ({'ruby':'Ruby'}, {'flag':'true'},{'date':now}))

我应该在Forms.py上声明哪种字段?

1 个答案:

答案 0 :(得分:1)

据我了解,您需要一个嵌套文档(技能)到另一个文档中(在这种情况下,该文档指的是User)。为此,您无需原子地更新字段,而是将附加值添加到子文档中,并保存所有内容。 尝试以您的示例为例,在您的情况下,应执行以下操作:

user = User.objects(email=current_user.email).get()

要通过某个查询过滤器获取引用用户X的BaseQuery,在我的示例中为当前登录用户的电子邮件

user.kskills.append(SubDocumentClass(skillName="name_of_the_skill", status=True, date=datetime.now()))

用于将集合添加到子文档列表。 (我已经附加了您的字段)

user.save() 

保存所有内容