【发布时间】:2013-05-23 23:08:10
【问题描述】:
我正在编写一个 python 脚本来填充一个 mongodb 数据库,我的模型如下所示:
from mongoengine import *
from mongoengine.django.auth import User
class TrackGroup (Document):
name = StringField(required=True)
users = ListField(ReferenceField('User'))
devices = ListField(ReferenceField('Device'))
class Device(Document):
name = StringField(max_length=50, required=True)
grp = ListField(ReferenceField(TrackGroup))
class User(User):
first_name = StringField(max_length=50)
last_name = StringField(max_length=50)
grp = ListField(ReferenceField(TrackGroup))
我的脚本是这样的:
#Create a group
gName = 'group name'
g = TrackGroup(name=gName)
g.users = []
g.devices = []
g.save()
#create a user
u = User.create_user(username='name', password='admin', email='mail@ex.com')
gRef = g
u.grp = [gRef, ]
u.first_name = 'first'
u.last_name = 'last'
u.save()
gRef.users.append(u)
gRef.save()
#create a device
dev = Device(name='name').save()
gRef = g
dev.grp = [gRef, ]
dev.save()
gRef.devices.append(dev)
gRef.save() #Problem happens here
当我调用gRef.save() 时出现问题,我收到以下错误:
raise OperationError(message % unicode(err))
mongoengine.errors.OperationError: Could not save document (LEFT_SUBFIELD only supports Object: users.0 not: 7)
我环顾了一会,here 它说这意味着我正在尝试使用空键设置一个文件,如下所示:(示例来自上面的链接,不是我的)
{
"_id" : ObjectId("4e52b5e08ead0e3853320000"),
"title" : "Something",
"url" : "http://www.website.org",
"" : "",
"tags" : [ "international"]
}
我不知道这样的字段是从哪里来的,但是我打开一个mongo shell,从三个集合中查看了我的文档,我找不到这样的字段。
注意:如果我先添加设备,添加用户后保存组时也会出现同样的错误。
【问题讨论】:
-
嗨,Agent1891,从那以后你解决了这个问题吗?
-
@Jiequan 不幸的是没有:(我将我的部分数据库迁移到 mysql,所以导致这个问题的部分不再存在。现在我只将 monogo 用于一个集合。但是,如果我发现我会发布一个解决方案。
标签: python django mongodb mongoengine