最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何填充与猫鼬对象数组

IT培训 admin 6浏览 0评论

如何填充与猫鼬对象数组

我在猫鼬下面的模式:

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

这和各种尝试与填入参数要么不填充字段或不返回任何数据。

我究竟做错了什么?

回答如下:

您已经定义的模式,而不是模型。该_codes有一个裁判模型Codes但它并不存在。当你调用.populate与第一两个参数它假定模型是Codes(从参考抽放)

为了解决这个问题,你需要添加:

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

也许你需要做Users相同

populate here完整的文档

附:的建议:如果要定义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: ...}
});

如何填充与猫鼬对象数组

我在猫鼬下面的模式:

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

这和各种尝试与填入参数要么不填充字段或不返回任何数据。

我究竟做错了什么?

回答如下:

您已经定义的模式,而不是模型。该_codes有一个裁判模型Codes但它并不存在。当你调用.populate与第一两个参数它假定模型是Codes(从参考抽放)

为了解决这个问题,你需要添加:

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

也许你需要做Users相同

populate here完整的文档

附:的建议:如果要定义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)

  1. 暂无评论