【问题标题】:mongodb queryset save does not do update , only insertmongodb queryset save 不做更新,只插入
【发布时间】:2013-03-05 09:05:49
【问题描述】:

在我的烧瓶应用中:

class places(db.Document):
    meta = {
        'collection': 'places',
        'allow_inheritance': False,
    }
    name = db.StringField(max_length=200, required=True)
    loc= db.GeoPointField(required=True)

x = places(loc=[-87,101], name="test")
places.save(x)

但是,我只想插入新文档,否则我想更新行。 我不确定如何使用 upsert/update。

我遇到一个错误,告诉我在更新前保存(我在我的烧瓶应用程序中使用 mongoengine)。

【问题讨论】:

    标签: python mongodb flask mongoengine


    【解决方案1】:

    我认为你不能那样做。 不过你可以试试下一个:

    首先尝试从db中获取对象

    place = places.objects(name="test").first()
    if place:
        #update here
        place.loc = [88,102]
    else:
        #create new here
        place = places(loc = [-87,101], name="test")
    place.save()
    

    【讨论】:

    • 你能详细说明我是如何#update here 的吗?是不是像 places.update?
    • 如果我尝试使用 places.objects(name = "test") 在我的烧瓶应用程序中没有返回任何内容,而在 mongodb 中 db.places.find({name : "test"}) 返回结果 。请帮助@Elephant
    • 哦,那是我的错误。我在我的回答中解决了这个问题。 places.objects(name="test").first() 当然
    • 感谢@Elephant 的帮助,但如果我尝试在我的控制台上打印 places.objects(name="test").first() 。它给了我 [] ,而我的数据库中有一行返回 db.places.find()
    • 我发现了问题。您的解决方案非常完美。我的烧瓶应用程序必须重新启动,因为它使用的是旧的数据库上下文。谢谢@大象
    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2019-09-21
    • 2021-10-26
    • 2015-10-01
    • 2017-01-16
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多