0

我正在尝试创建一个嵌套对象数组。我正在遵循一本书中的示例,该示例执行以下操作:

      // 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);

为一个人存储多个电话号码时效果很好。但是我不确定是否有一种好的/快速的方法可以通过_id 获取电话对象。由于 Phone 不是猫鼬模型,因此您不能直接转到 Phone.findOne({...}); 现在,我坚持通过 _id 获取一个人,然后遍历该人的电话并查看 id 是否匹配。

然后我偶然发现了这个链接: http: //mongoosejs.com/docs/populate.html

一种方法比另一种更正确吗?目前,当我删除一个人时,他/她的手机也会消失。不太确定是否适用于“填充”,似乎我需要删除人员和电话。

有人想尝试解释这些差异吗?

提前致谢

4

1 回答 1

1

一般规则是,如果您需要独立查询电话,则应将它们保存在单独的集合中,并在需要时populate用于查找它们People。否则,嵌入它们通常是更好的选择,因为它简化了更新和删除。

当使用像现在这样的嵌入式方法时,请注意 Mongoose 数组提供了一种方法,您可以使用它来更轻松地按元素的值id查找元素。_id

var phone = person.phones.id(id);
于 2013-03-04T22:56:28.833 回答