我正在尝试创建一个嵌套对象数组。我正在阅读一本书中的例子,该书执行以下操作:
// Creates the Schema for the Features object (mimics ESRI)
var Phone = new Schema({
number: { type: Number, required: false },
...
personId: {type: Schema.Types.ObjectId}
}
);
// Creates the Schema for the Attachments object
var Person = new Schema({
name: { type: String },
phones: [Phone]
}
);
var Person = mongoose.model('Person', Person);
当为一个人存储多个Phone#时,哪个工作正常。但是我不确定是否有一种好/快的方式来通过_id获取Phone对象。由于Phone不是猫鼬模型,你不能直接去Phone.findOne({...});现在我很难通过_id找到一个人,然后循环播放那些人的电话,看看id是否匹配。
然后我偶然发现了这个链接: http://mongoosejs.com/docs/populate.html
一种方式比另一种方式更正确吗?目前,当我删除一个人时,他/她的手机也会消失。不太确定与'populate'一起使用,似乎我需要删除Person和Phones。
有人想尝试解释这些差异吗?
提前致谢
答案 0 :(得分:1)
一般规则是,如果您需要独立查询电话,那么您应该将它们保存在单独的集合中,并在需要时使用populate
从People
查找它们。否则,嵌入它们通常是更好的选择,因为它简化了更新和删除。
当使用像您现在这样的嵌入式方法时,请注意Mongoose数组提供了一种id
方法,您可以使用该方法通过_id
值更轻松地查找元素。
var phone = person.phones.id(id);