2014-08-28 92 views
0

我有貓鼬下面的模式:如何填充對象數組mongose

var documentsSchema = new Schema({ 
"document" : { 
    "_project"   : { 
     type : Schema.ObjectId, 
     ref : 'Projects' 
    }, 
    "_addedBy"   : { 
     type : Schema.ObjectId, 
     ref : 'Users' 
    }, 
    "_associateUsers" : [{ 
     type : Schema.ObjectId, 
     ref : 'Users' 
    }], 
    "_codes"   : [{ 
     type : Schema.ObjectId, 
     ref : 'Codes' 
    }], 
    "paragraphTitle" : String, 
    "paragraphText"  : String, 

    "memos"    : [ 
    { 
     "_addedBy"  : { 
      type: Schema.Types.ObjectId, 
      ref: 'Users' 
     }, 
     "memoData"  : String 
    } 
]}}); 

與代碼:

var codesSchema = new Schema({ 
"code" : { 

    "_addedBy"  : { 
     type : Schema.ObjectId, 
     ref  : 'Users' 
    }, 
    "codeText"  : String, 
    "codeWeight" : Number 
}}); 

我需要填充_codes.codeText(或代碼字段)數組中的所有元素,但看起來像我沒有正確地做。

Documents.find({ 
      "document._project": element._id 
      }). 
      populate('document._codes.code','codeText'). 
      exec(function (err, result) { .... } 

這個和各種帶有填充參數的嘗試要麼不填充字段要麼沒有返回任何數據。

我在做什麼錯?

回答

0

您已定義模式,但未定義模型。 _codes有一個Codes型號的參考,但它不存在。當你調用.populate與第一兩個參數它假定模型是Codes(從參考抽放)

爲了解決這個問題,玩具需要添加:

mongoose.model('Codes', codesSchema); 
mongoose.model('Documents', documentsSchema); 

也許你需要做Users相同

populatehere

PS的完整文檔的建議:如果要定義一個架構codes或任何你不需要再定義對象相同的架構的一部分的名字,看看:

從這個

//your style 
var catsSchema = new Schema({ 
    "cat" : { 
     "attr1" : {type: ...}, 
     "attr2" : {type: ...} 
    } 
}); 

到這

//obviously attr1 and attr2 are part of cat object/document 
var catsSchema = new Schema({ 
    "attr1" : {type: ...}, 
    "attr2" : {type: ...} 
}); 
+0

我有這些,但沒有把它們粘貼到一個問題: VAR代碼= mongoose.model( '代碼',codesSchema, '碼'); 關於PS,我正在爲模板引擎做這件事,但是在開始時我並沒有意識到,我可能會將其添加到數據中,傳遞給渲染,而不是文檔本身。 ('project._addedBy','name.first name.last')。 – 2014-08-28 05:27:54

+0

並且這也工作得很好: Project.find({project._addedBy「:query })。populate('project._addedBy','name.first name.last')。 精益(true).exec(findDocs); – 2014-08-28 05:39:11

+1

你可以試試嗎? :document.find({...})。populate('document._codes')。exec({...}) – rogelio 2014-08-28 05:47:40