python - 如何在mongodb shell中设置mongoengine的ReferenceField值?

标签 python django mongodb shell

这是我使用 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/

相关文章:

python - Airflow - SubDag 中长时间运行的任务在一小时后标记为失败

python - PsychoPy 中具有多种颜色的文本

python - 为什么 Django 将其称为 "views.py"而不是 Controller ?

python - djangorest框架列 'product_id'不能为空

json - 如何将 az cli 的输出保存到本地数据库?

python - 切片 multiIndex 的两个不同级别时出错

python - BeautifulSoup 在特定标题后得到表格

python - 调试缓慢的 Django 管理 View

javascript - 在 Node.js 项目中连接多个 Mongo DB

java - 如何使用 Java 在 MongoDB 3 中使用多个过滤器执行文档的批量更新