Mongoengine Document对象无法使用from_json进行更新

时间:2015-01-16 10:37:12

标签: python mongoengine

来自here

我需要使用from_json更新现有的文档数据。

当我使用from_json

>> user = User.objects(pk=2).first()
>> print user.to_json()

以上显示

>> {"_id": 1, "_cls": "User", "name": "OldName"}

现在我更新了现有的user对象

>> user = user.from_json(json.dumps({"_id": 1, "_cls": "User", "name": "NewName"}))
>> user.save()
>> print user.to_json()

显示

>> {"_id": 1, "_cls": "User", "name": "NewName"}

但它无法在DB中更新。

我再次查询它显示的user

>> {"_id": 1, "_cls": "User", "name": "OldName"}

我的问题是如何使用文档对象方法from_json更新现有数据?

3 个答案:

答案 0 :(得分:1)

我担心这是一个常见的问题,可能还没有解决,这是一个链接到MongoEngine的源代码,你可以搜索“from_json”,看看你是否可以通过弄清楚这个功能是什么来解决实际上在做:https://github.com/MongoEngine/mongoengine/blob/master/mongoengine/queryset/base.py;

对我来说,我只是遍历json数据的(key, value)并通过以下方式手动设置:

Batman = User.objects.get('user_id'='blah')
data = {'username':'batman', 'password':'iLoveGotham'}
for (key, val) in data.items():
  Batman[key] = val
Batman.save()

它有效,但希望from_json函数可以实际工作,这样这个过程就会变得更加优雅。

答案 1 :(得分:1)

对我来说,以下工作有效:

user.update(**mydictname) #mydictname contains the dictionary of values I want to update
user.save()
user.reload() #not doing this makes the changes available only after the object is reloaded elsewhere

答案 2 :(得分:0)

如果您在Mongo Shell中搜索该文档,它是否会更新?如果没有,请停止阅读 here 。保存不会自动更新对象,但我认为如果您调用类似的内容:

>> user = user.from_json(json.dumps({"_id": 1, "_cls": "User", "name": "NewName"}))
>> user.save()
>> user.reload()
>> print user.to_json()

我自己学习Mongoengine,但这是一个很好的资源:http://docs.mongoengine.org/guide/