这是我使用 mongo 的第二天。我正在使用 django + mongoengine。 我的文章文档的结构是这样的:
class Article(Document):
title = StringField(required=True)
content = StringField(required=True)
comments = ListField(ReferenceField(Comment))
author = ReferenceField(MUser, required=False)
我可以从 django shell 设置作者的值,但我找不到设置此作者字段值的方法(这将是一个 MUser 对象)。 我已经尝试过这个:
db.article.update({
'title' : 'asdasdasdasd'
}, {
$set : {
'author' : db.m_user.find({
'email' : 'vsp@gmail.com'
})
}
})
但这做了一些我没有得到的事情,当我执行db.article.find()
时,我得到了这个结果:
{
"_id" : ObjectId("57153cc2aec9680bc327bedb"),
"title" : "asdasdasdasd",
"content" : "",
"author" : {
"_mongo" : {
"slaveOk" : false,
"host" : "127.0.0.1",
"defaultDB" : "",
"promptPrefix" : "",
"authStatus" : {
"authRequired" : true,
"replSetGetStatus" : false,
"isMaster" : true
},
"_readMode" : "commands",
"_writeMode" : "commands"
},
"_db" : {
"_mongo" : {
"slaveOk" : false,
"host" : "127.0.0.1",
"defaultDB" : "",
"promptPrefix" : "",
"authStatus" : {
"authRequired" : true,
"replSetGetStatus" : false,
"isMaster" : true
},
"_readMode" : "commands",
"_writeMode" : "commands"
},
"_name" : "mblog"
},
"_collection" : {
"_mongo" : {
"slaveOk" : false,
"host" : "127.0.0.1",
"defaultDB" : "",
"promptPrefix" : "",
"authStatus" : {
"authRequired" : true,
"replSetGetStatus" : false,
"isMaster" : true
},
"_readMode" : "commands",
"_writeMode" : "commands"
},
"_db" : {
"_mongo" : {
"slaveOk" : false,
"host" : "127.0.0.1",
"defaultDB" : "",
"promptPrefix" : "",
"authStatus" : {
"authRequired" : true,
"replSetGetStatus" : false,
"isMaster" : true
},
"_readMode" : "commands",
"_writeMode" : "commands"
},
"_name" : "mblog"
},
"_shortName" : "m_user",
"_fullName" : "mblog.m_user"
},
"_ns" : "mblog.m_user",
"_query" : {
"email" : "vsp@gmail.com"
},
"_fields" : null,
"_limit" : 0,
"_skip" : 0,
"_batchSize" : 0,
"_options" : 0,
"_cursor" : null,
"_numReturned" : 0,
"_special" : false
}
}
我设法从 django shell 设置类似的情况,并且该记录清楚地显示了作者是谁,就像这样..
{
"_id" : ObjectId("57153ae9aec9680a8ae8f5a6"),
"title" : "sdd",
"content" : "eer",
"author" : ObjectId("576fff2daec96854d8bff581"),
"comments" : [ObjectId("5770282faec968640568f4ce")]
}
我该如何实现这一目标。谢谢
最佳答案
在 Mongo shell 中,我们不能以类似 os SQL 的语法使用子查询。
要解决这个问题,我们可以这样做:
var author = db.m_user.find({
'email' : 'vsp@gmail.com'
}).limit(1).toArray()
db.article.update({
'title' : 'asdasdasdasd'
}, {
$set : {
'author' : author[0]._id
}
})
欢迎任何意见!
关于python - 如何在mongodb shell中设置mongoengine的ReferenceField值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38049057/