如何使用Mongoose填充对象数组

时间:2014-08-28 04:32:41

标签: node.js mongoose

我在mongoose中有以下模式:

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) { .... }

这和使用populate参数的各种尝试要么不填充字段,要么不返回任何数据。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您已定义架构,但未定义模型。 _codes对模型Codes有一个参考,但它不存在。当您使用前两个参数调用.populate时,它会假定模型为Codes(从参考中删除)

要解决此问题,玩具需要添加:

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

也许你需要对Users

做同样的事情

请参阅populate here

的完整文档

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: ...}
});