Node.js 如何在mongoose中定义嵌套模式?

Node.js 如何在mongoose中定义嵌套模式?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我的mongo唱片是这样的: { "_id":{"$oid":"5550b6de437f572112a29f1a"}, "cv_count":177732, "gender_info": {"male_count": 50, "female_count": 32} "stability_info_list":[{"ratio":8.802558610369414e-05,"total_count":34081,"years":0},{"ratio":5.86837

我的mongo唱片是这样的:

{
    "_id":{"$oid":"5550b6de437f572112a29f1a"},
    "cv_count":177732,
    "gender_info": {"male_count": 50, "female_count": 32}
    "stability_info_list":[{"ratio":8.802558610369414e-05,"total_count":34081,"years":0},{"ratio":5.868372406912943e-05,"total_count":34081,"years":1}],
    "zhineng_id":"IT Manager"
}
var ZhinengGenderSchema = new Schema({
    male_count: Number,
    female_count: Number
});

var ZhinengStabilitySchema = new Schema({
    ratio: Number,
    total_count: Number,
    years: Number
});

var ZhinengStats = new Schema({
    cv_count: Number,
    gender_info: ZhinengGenderSchema,
    stability_info_list: [ZhinengStabilitySchema],
    zhineng_id: String
})
var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var bookSchema = new Schema({
    value: { type: String }
});

var authorSchema = new Schema({
    books: [bookSchema]
});
var ZhinengStats = new Schema({
    cv_count: Number,
    gender_info: [{male_count: Number, female_count: Number}],
    stability_info_list: [ZhinengStabilitySchema],
    zhineng_id: String
})
我这样写模式:

{
    "_id":{"$oid":"5550b6de437f572112a29f1a"},
    "cv_count":177732,
    "gender_info": {"male_count": 50, "female_count": 32}
    "stability_info_list":[{"ratio":8.802558610369414e-05,"total_count":34081,"years":0},{"ratio":5.868372406912943e-05,"total_count":34081,"years":1}],
    "zhineng_id":"IT Manager"
}
var ZhinengGenderSchema = new Schema({
    male_count: Number,
    female_count: Number
});

var ZhinengStabilitySchema = new Schema({
    ratio: Number,
    total_count: Number,
    years: Number
});

var ZhinengStats = new Schema({
    cv_count: Number,
    gender_info: ZhinengGenderSchema,
    stability_info_list: [ZhinengStabilitySchema],
    zhineng_id: String
})
var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var bookSchema = new Schema({
    value: { type: String }
});

var authorSchema = new Schema({
    books: [bookSchema]
});
var ZhinengStats = new Schema({
    cv_count: Number,
    gender_info: [{male_count: Number, female_count: Number}],
    stability_info_list: [ZhinengStabilitySchema],
    zhineng_id: String
})
但我有一个例外:

TypeError: Undefined type `undefined` at `gender_info`
Did you try nesting Schemas? You can only nest using refs or arrays.

所以
mongoose
不支持嵌套模式?但我的数据库已经存在,我无法更改,因此如何定义我的模式?

使用mongoose可以在数组中定义嵌套(嵌入)模式,如下所示:

{
    "_id":{"$oid":"5550b6de437f572112a29f1a"},
    "cv_count":177732,
    "gender_info": {"male_count": 50, "female_count": 32}
    "stability_info_list":[{"ratio":8.802558610369414e-05,"total_count":34081,"years":0},{"ratio":5.868372406912943e-05,"total_count":34081,"years":1}],
    "zhineng_id":"IT Manager"
}
var ZhinengGenderSchema = new Schema({
    male_count: Number,
    female_count: Number
});

var ZhinengStabilitySchema = new Schema({
    ratio: Number,
    total_count: Number,
    years: Number
});

var ZhinengStats = new Schema({
    cv_count: Number,
    gender_info: ZhinengGenderSchema,
    stability_info_list: [ZhinengStabilitySchema],
    zhineng_id: String
})
var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var bookSchema = new Schema({
    value: { type: String }
});

var authorSchema = new Schema({
    books: [bookSchema]
});
var ZhinengStats = new Schema({
    cv_count: Number,
    gender_info: [{male_count: Number, female_count: Number}],
    stability_info_list: [ZhinengStabilitySchema],
    zhineng_id: String
})
或参照

var mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    ObjectId = mongoose.Schema.Types.ObjectId;

var auhtorSchema = new Schema({
  book: { type: ObjectId, ref: 'Book'}
});

您可以选择更适合您的内容

只需不为子文档创建新架构,您应该可以,即:

var ZhinengGenderSchema = {
    male_count: Number,
    female_count: Number
};

var ZhinengStabilitySchema = {
    ratio: Number,
    total_count: Number
    years: Number
};

var ZhinengStats = new Schema({
    cv_count: Number,
    gender_info: ZhinengGenderSchema,
    stability_info_list: [ZhinengStabilitySchema],
    zhineng_id: String
})

据我所知,这是由于目前对猫鼬的限制。你不能 声明架构字段以包含单个子文档:您必须使用数组。见此:

您可以稍后设置适当的业务逻辑,以确保只添加一个子元素

试试这个:

var ZhinengStats = new Schema({
    cv_count: Number,
    gender_info: [ZhinengGenderSchema],
    stability_info_list: [ZhinengStabilitySchema],
    zhineng_id: String
})
这样,每个子文档在MongoDB中都有自己的
\u id
(即使它不在特定的集合中)。请参阅更多:

您也可以选择以下内容:

{
    "_id":{"$oid":"5550b6de437f572112a29f1a"},
    "cv_count":177732,
    "gender_info": {"male_count": 50, "female_count": 32}
    "stability_info_list":[{"ratio":8.802558610369414e-05,"total_count":34081,"years":0},{"ratio":5.868372406912943e-05,"total_count":34081,"years":1}],
    "zhineng_id":"IT Manager"
}
var ZhinengGenderSchema = new Schema({
    male_count: Number,
    female_count: Number
});

var ZhinengStabilitySchema = new Schema({
    ratio: Number,
    total_count: Number,
    years: Number
});

var ZhinengStats = new Schema({
    cv_count: Number,
    gender_info: ZhinengGenderSchema,
    stability_info_list: [ZhinengStabilitySchema],
    zhineng_id: String
})
var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var bookSchema = new Schema({
    value: { type: String }
});

var authorSchema = new Schema({
    books: [bookSchema]
});
var ZhinengStats = new Schema({
    cv_count: Number,
    gender_info: [{male_count: Number, female_count: Number}],
    stability_info_list: [ZhinengStabilitySchema],
    zhineng_id: String
})
在本例中,将一个模式嵌套在另一个模式中。单个
gender\u info
元素没有文档的尊严