【问题标题】:How to set ReferenceField value of mongoengine in mongodb shell?如何在 mongodb shell 中设置 mongoengine 的 ReferenceField 值?
【发布时间】:2016-06-27 08:23:43
【问题描述】:

这是我与 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")]
}

我如何做到这一点。谢谢

【问题讨论】:

    标签: python django mongodb shell


    【解决方案1】:

    在 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
            }
        })
    

    欢迎任何 cmets!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 2012-02-29
      • 1970-01-01
      • 2018-02-08
      相关资源
      最近更新 更多