Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用from#json生成的MongoEngine文档对象不';救不了_Python_Mongodb_Pymongo_Mongoengine_Flask Mongoengine - Fatal编程技术网

Python 使用from#json生成的MongoEngine文档对象不';救不了

Python 使用from#json生成的MongoEngine文档对象不';救不了,python,mongodb,pymongo,mongoengine,flask-mongoengine,Python,Mongodb,Pymongo,Mongoengine,Flask Mongoengine,我正在尝试使用from_json方法构建一个文档对象。object.save()不会抛出错误,但文档不会插入mongo中 另一方面,如果我通过为每个字段指定值来创建对象,则效果很好 我找不到原因。下面是这两种情况的代码 from flask import Flask from flask.ext.mongoengine import MongoEngine import json, datetime app = Flask(__name__) app.config["MONGODB_SETTI

我正在尝试使用from_json方法构建一个文档对象。object.save()不会抛出错误,但文档不会插入mongo中

另一方面,如果我通过为每个字段指定值来创建对象,则效果很好

我找不到原因。下面是这两种情况的代码

from flask import Flask
from flask.ext.mongoengine import MongoEngine
import json, datetime

app = Flask(__name__)
app.config["MONGODB_SETTINGS"] = {'DB': 'test','host': 'localhost'}
app.config["SECRET_KEY"] = "mySecretKey"

db = MongoEngine(app)
class User(db.Document):
    user_id = db.StringField(max_length=16, primary_key = True)
    username = db.StringField(min_length=8)
    email = db.EmailField(required = True, unique = True)
    password = db.StringField(required = True)
    date_of_birth = db.DateTimeField()
    gender = db.StringField(choices = ('M', 'F'))

'''
    This one works. This will add a user in local mongodb(test)
'''
u1 = User()
u1.username = 'test12345'
u1.user_id = 'testid12345'
u1.email = 'test@test.com'
u1.password = 'testerpass'
u1.save()

'''
    This one doesn't works.
'''
u2 = User()
temp_json = {'username':'test2_12345','user_id':'testid2@12345','password':'testerpass2','email':'test2@test.com'}
u2 = u2.from_json(json.dumps(temp_json))
u2.save()

您正在将
u2
分配给来自_json()的
的结果,并丢失对原始用户对象的引用


u2=u2.从_json(…
更改为
u2.从_json(…

可以使用
**kwargs
初始化mongoengine文档对象。因此,使用此选项,我们可以通过以下方式实现来自_json
功能:-

obj_dict = {
    'key1' : 'value1',
    'key2' : 'value2'
}
user = User(**obj_dict) # User is a mongoengine document object
这对我很有用。

from_json()
将未保存的文档实例转换为json数据。 未保存文档的保存方法是使用参数
force\u insert=True

...
>>> User.objects
[<User: test1-12345>]
>>> u2.save()
>>> User.objects
[<User: test1-12345>]
>>> u2.save(force_insert=True)
>>> User.objects
[<User: test1-12345>, <User: test2-12345>]
。。。
>>>用户对象
[]
>>>u2.save()
>>>用户对象
[]
>>>u2.保存(强制插入=真)
>>>用户对象
[, ]
但是,你的代码我可以

我不能在这里编码。(我需要单元测试的夹具数据。)

I环境Django 1.6.5和mongoengine 0.8.7

>>> json_data1 = u1.to_json()
>>> User.objects.delete() # or User.drop_collection()
>>> User.objects
[]
>>>
...
# json_data1 to dump for pickle. Next load for pickle.
...
>>> u1 = User.from_json(json_data1)
>>> u1.save()
>>> User.objects
[]
>>> u1.save(force_insert=True)
>>> User.objects
[<User: test1-12345>]
>>>
>>json\u data1=u1.to\u json()
>>>User.objects.delete()#或User.drop_集合()
>>>用户对象
[]
>>>
...
#要为pickle转储的json_数据1。下一次加载pickle。
...
>>>u1=用户。来自_json(json_data1)
>>>u1.save()
>>>用户对象
[]
>>>u1.保存(强制插入=真)
>>>用户对象
[]
>>>
force_insert=True
仅用于尝试创建新文档

每次使用
force\u insert=True
创建新文档时


Use
force_insert=False
是数据库中的get document。

from_json方法返回一个document对象,其中json中提供的字段分配给该对象。因此,返回的对象必须是done object.save()。如果未分配u2,则返回from_json()中的值方法它仍然是一个空的用户文档对象。u2.from_json(…不为原始的u2赋值。我不太理解这个答案的大部分内容,但force_insert=True为我解决了它…并且您的Mongo样式的json字段之一是格式为
timestamp:{$date:14400279372}
的日期,对吗?