2013-03-14 56 views
19

Có vẻ hợp lý với tôi để thực hiện điều gì đó như sau:Mẫu thích hợp cho các lược đồ lồng nhau trong Mongoose/MongoDB là gì?

var AvatarSchema = new Mongoose.Schema({ 
    type: String, 
    url: String 
}); 

var UserSchema = new Mongoose.Schema({ 
    avatars: [AvatarSchema], 
    email: String, 
    name: String, 
    salt: String, 
    token: String 
}); 

var ThinUserSchema = new Mongoose.Schema({ 
    avatars: [AvatarSchema], 
    email: String, 
    firstname: String, 
    lastname: String, 
}); 

var QuestionSchema = new Mongoose.Schema({ 
    question: String, 
    users: [ThinUserSchema] 
}); 

Sau đó bật lại. . .do một cái gì đó như sau:

var question = new Question({ 
    question: 'Wut?', 
    users: users //where users is an array of instances of a user model of the UserSchema 
}); 

Ở đây tôi hy vọng phần người dùng của câu hỏi sẽ được phổ biến với hình đại diện, email, họ và họ. . Tuy nhiên, kể từ khi người dùng/avatar đã có _id, đây không phải là vẫn tồn tại.

  • Xóa từng dấu _id khỏi người dùng/hình đại diện có vẻ ngớ ngẩn.
  • Thiết lập rõ ràng từng người dùng/hình đại diện có vẻ không hiệu quả.
  • Chuyển sang loại hỗn hợp, đặt mọi thứ trong đó và yêu cầu markModified.

Mẫu thích hợp cho các loại lược đồ này là gì?

Cảm ơn!

Trả lời

3

Tôi mongoose Noob vẫn còn và nếu tôi hiểu đúng Tôi nghĩ rằng những gì bạn cần phải đọc là thế này: http://mongoosejs.com/docs/populate.html

Có một rất tốt đẹp và đơn giản ví dụ, nơi bạn đã tham chiếu schemas trong lược đồ khác. Vì vậy, để bao gồm một tài liệu của lược đồ cụ thể bên trong một lược đồ khác, tốt hơn nên đưa nó vào tài liệu tham khảo. Khi bạn cần, bạn gọi populate trên tài liệu gốc. Khi bạn thay đổi tài liệu con, phụ huynh dân cư cũng sẽ thay đổi.

+3

Dân cư nhấn cơ sở dữ liệu với truy vấn bổ sung và không cho phép lựa chọn trường không đầy đủ từ bộ sưu tập khác. Tôi nghĩ [subdocs] (http://mongoosejs.com/docs/subdocs.html) phù hợp hơn ở đây. – mtsr

3

Tôi tin rằng bạn là chính xác trong các giả định của bạn, nó được gọi là tài liệu nhúng trong Mongoose, đây là ví dụ từ tài liệu Mongoose.

var Comments = new Schema({ 
    title  : String 
    , body  : String 
    , date  : Date 
}); 

var BlogPost = new Schema({ 
    author : ObjectId 
    , title  : String 
    , body  : String 
    , date  : Date 
    , comments : [Comments] 
    , meta  : { 
     votes : Number 
     , favs : Number 
    } 
}); 

mongoose.model('BlogPost', BlogPost); 

Tuyên bố từ chối trách nhiệm: Tôi không nhất thiết phải đặt dấu phẩy trước các mục!

+0

bạn có cần gọi markModified ('meta') trước khi lưu không? – OMGPOP

+1

Không, nó sẽ lưu tất cả các phần tử của tài liệu. –

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