2016-06-27 10 views
1

これはmongoでの2日目です。私はdjango + mongoengineと一緒に働いています。私の記事の文書の 構造はこのようなものです:mongodengシェルのmongoengineのReferenceField値を設定する方法は?

class Article(Document): 
    title = StringField(required=True) 
    content = StringField(required=True) 
    comments = ListField(ReferenceField(Comment)) 
    author = ReferenceField(MUser, required=False) 

私は、Djangoのシェルから作者の値を設定することができますが、私は(MUSER対象になります)、この著者のフィールドの値を設定する方法を見つける傾けます。 私はこれ試してみました:

db.article.update({ 
    'title' : 'asdasdasdasd' 
}, { 
    $set : { 
     'author' : db.m_user.find({ 
      'email' : '[email protected]' 
     }) 
    } 
}) 

をしかし、これは私がdb.article.find()を行うとき、私はこの結果を取得するには、私が得るいけない何かを行います。

私はDjangoのシェルから似たような状況を設定するために管理
{ 
    "_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" : "[email protected]" 
     }, 
     "_fields" : null, 
     "_limit" : 0, 
     "_skip" : 0, 
     "_batchSize" : 0, 
     "_options" : 0, 
     "_cursor" : null, 
     "_numReturned" : 0, 
     "_special" : false 
    } 
} 

、およびそのこのように著者が何であるかが記録されています。

{ 
    "_id" : ObjectId("57153ae9aec9680a8ae8f5a6"), 
    "title" : "sdd", 
    "content" : "eer", 
    "author" : ObjectId("576fff2daec96854d8bff581"), 
    "comments" : [ObjectId("5770282faec968640568f4ce")] 
} 

私はこれをどのように達成しますか?ありがとう

答えて

1

Mongoシェルでは、種類のSQLのような構文でサブクエリを使用できません。

は、私たちができることを解決するには、次の

var author = db.m_user.find({ 
     'email' : '[email protected]' 
    }).limit(1).toArray() 

    db.article.update({ 
     'title' : 'asdasdasdasd' 
    }, { 
     $set : { 
      'author' : author[0]._id 
     } 
    }) 

すべてのコメント大歓迎!

+0

ありがとうございます。 :) –

関連する問題