2016-06-27 2 views
1

это мой второй день с монго. Я работаю с django + mongoengine. структура моей статьи документа, как это:Как установить значение ReferenceField для mongoengine в оболочке mongodb?

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

я могу установить значение автора из Джанго оболочки, но я не могу найти способ, чтобы установить это значение поля автора (который будет объектом Muser). Я попытался это:

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

но это делает что-то, что я не получаю, когда я делаю 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" : "[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

Спасибо, что работает. :) –

Смежные вопросы