簡體   English   中英

如何在貓鼬中定義嵌套模式?

[英]How to define a nested schema in 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.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
})

但是我感到興奮:

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

所以mongoose不支持嵌套模式? 但是我的數據庫已經在那里,我無法更改,那么如何定義模式?

使用貓鼬,您可以在Array中定義嵌套(嵌入式)架構,如下所示:

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

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

var authorSchema = new Schema({
    books: [bookSchema]
});

或參考

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

據我所知,這是由於貓鼬的當前限制。 您不能聲明架構字段以包含單個子文檔:您必須使用數組。 看到這個: https : //github.com/Automattic/mongoose/pull/585

您可以稍后設置適當的業務邏輯,以確保僅添加一個子元素。

嘗試這個:

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

這樣,每個子文檔在MongoDB中都有自己的_id (即使它不在特定的集合中)。 查看更多: http : //mongoosejs.com/docs/subdocs.html

您還可以喜歡這樣的東西:

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

在這種情況下,您將一個架構嵌套在另一個架構中。 單個gender_info元素不具有文檔的尊嚴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM