2012-04-02 33 views
5

Tôi đã đọc và đọc lại một số bài đăng về tài liệu được nhúng và liên kết trong Mongoose. Dựa trên những gì tôi đã đọc, tôi đã kết luận rằng nó sẽ là tốt nhất để có cấu trúc sơ đồ tương tự như sau:Cách điền các tài liệu được nhúng lồng vào Mongoose

var CategoriesSchema = new Schema({ 
    year   : {type: Number, index: true}, 
    make   : {type: String, index: true}, 
    model   : {type: String, index: true}, 
    body   : {type: String, index: true} 
}); 

var ColorsSchema = new Schema({ 
    name   : String, 
    id    : String, 
    surcharge  : Number 
}); 

var MaterialsSchema = new Schema({ 
    name    : {type: String, index: true}, 
    surcharge   : String, 
    colors    : [ColorsSchema] 
}); 

var StyleSchema = new Schema({ 
    name    : {type: String, index: true}, 
    surcharge   : String, 
    materials   : [MaterialsSchema] 
}); 

var CatalogSchema = new Schema({ 
    name     : {type: String, index: true}, 
    referenceId   : ObjectId, 
    pattern    : String, 
    categories   : [CategoriesSchema], 
    description   : String, 
    specifications  : String, 
    price    : String, 
    cost    : String, 
    pattern    : String, 
    thumbnailPath  : String, 
    primaryImagePath : String, 
    styles    : [StyleSchema] 
}); 

mongoose.connect('mongodb://127.0.0.1:27017/sc'); 
exports.Catalog = mongoose.model('Catalog', CatalogSchema); 

Các dữ liệu quy định tại CategoriesSchema, ColorsSchema và MaterialsSchema sẽ không thay đổi rất thường xuyên, nếu bao giờ hết. Tôi quyết định sẽ tốt hơn nếu có tất cả dữ liệu trong mô hình Catalog bởi vì trong khi có nhiều loại, màu sắc và vật liệu, sẽ không có nhiều và tôi không cần phải tìm bất kỳ dữ liệu nào trong số đó độc lập với Catalog.

Nhưng tôi hoàn toàn bối rối về việc lưu dữ liệu vào mô hình. Đây là nơi tôi bị bối rối:

var item = new Catalog; 
item.name = "Seat 1003"; 
item.pattern = "91003"; 
item.categories.push({year: 1998, make: 'Toyota', model: 'Camry', body: 'sedan' }); 
item.styles.push({name: 'regular', surcharge: 10.00, materials(?????)}); 

item.save(function(err){ 

}); 

Với lược đồ nhúng lồng nhau như thế này, làm cách nào để lấy dữ liệu vào tài liệu và tài liệu nhúng màu?

phương thức .push() dường như không có sẵn cho các tài liệu lồng nhau.

Trả lời

7

Mảng tài liệu được nhúng có phương thức push. Chỉ cần thêm Tài liệu được nhúng sau khi ban đầu tạo ra item:

var item = new Catalog; 
item.name = "Seat 1003"; 
item.pattern = "91003"; 
item.categories.push({year: 1998, make: 'Toyota', model: 'Camry', body: 'sedan' }); 

var color = new Color({name: 'color regular', id: '2asdfasdfad', surcharge: 10.00}); 
var material = new Material({name: 'material regular', surcharge: 10.00}); 
var style = new Style({name: 'regular', surcharge: 10.00}); 

sau đó bạn có thể đẩy từng tài liệu được nhúng vào các bậc phụ huynh:

material.colors.push(color); 
style.materials.push(material); 
item.styles.push(style); 

Sau đó, bạn có thể lưu toàn bộ đối tượng cơ sở dữ liệu như bạn nơi đã thực hiện:

item.save(function(err){}); 

Vậy đó! Và bạn có EmbedAr DocumentArrays.

Một vài lưu ý khác về mã của bạn, bạn có pattern hai lần trong mô hình Danh mục của mình. Và để truy cập các loại mô hình khác của bạn, bạn cũng cần phải xuất các loại mô hình đó:

+0

Nếu có nhiều danh mục trong bộ sưu tập. làm thế nào chúng ta sẽ đẩy đến id cụ thể ?? –

Các vấn đề liên quan