2012-11-12 33 views
12

Tôi đang tạo một ứng dụng (Express + MongoDB + Mongoose), nơi các tài liệu được nhóm theo nhóm tự nhiên. Mọi truy vấn vào cơ sở dữ liệu sẽ chỉ cần truy cập tài liệu từ một nhóm duy nhất. Vì vậy, tôi nghĩ rằng đó là một ý tưởng tốt để tách từng nhóm thành bộ sưu tập riêng của mình vì lợi ích của hiệu suất.Mongoose - Cùng một lược đồ cho các bộ sưu tập khác nhau trong (MongoDB)

Bây giờ, tôi sẽ sử dụng cùng một lược đồ cho từng bộ sưu tập này vì chúng sẽ lưu trữ cùng một loại tài liệu. Tôi từng có một đối tượng Model duy nhất bởi vì tôi đã từng có mọi thứ trong một bộ sưu tập duy nhất nhưng bây giờ tôi cần nhiều Mô hình, mỗi Mô hình một nhóm.

Ý tưởng hay là tạo đối tượng Mô hình mới trên mọi yêu cầu (sử dụng Lược đồ được chia sẻ) hoặc điều này quá đắt? Điều gì sẽ là một quyết định kiến ​​trúc tốt trong trường hợp này?

Cách tiếp cận tốt nhất tôi có thể nghĩ là tạo Mô hình lần đầu tiên có yêu cầu thu thập và sau đó lưu bộ nhớ cache Mô hình trong từ điển để truy cập nhanh.

Tôi đoán cách tiếp cận tốt nhất phụ thuộc vào chi phí tạo đối tượng Mô hình mới trên mỗi yêu cầu.

Cảm ơn!

Trả lời

20

Mô hình đã được lưu trữ bởi Mongoose và bạn có thể sử dụng cùng một đối tượng lược đồ cho nhiều mô hình/bộ sưu tập. Vì vậy, chỉ cần tạo thiết lập của bạn của các mô hình một lần (lúc khởi động) sử dụng mã như:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var schema = new Schema({...}); 
var model1 = mongoose.model('model1', schema); 
var model2 = mongoose.model('model2', schema); 

Nếu bạn không muốn để vượt qua xung quanh model1, model2 trường hợp mô hình, bạn có thể nhìn chúng khi cần thiết bằng cách gọi mongoose.model('model1'); trong xử lý của bạn.

+0

Tôi gặp sự cố với điều này khi lưu trữ hai bộ sưu tập trên * các DB khác nhau *. Trong trường hợp đó, tôi khuyên bạn nên tạo hai lược đồ khác nhau, nhưng bạn có thể tái sử dụng cùng một đối tượng đặc tả lược đồ ('{...}' ở trên). (Lỗi tôi nhận được là một lỗi lạ: "xác nhận không thành công: đường dẫn __v là bắt buộc".) – joeytwiddle

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