【问题标题】:Proper way to create nested objects in mongo在 mongo 中创建嵌套对象的正确方法
【发布时间】:2013-03-05 06:56:28
【问题描述】:

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

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

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

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

提前致谢

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

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

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

    var phone = person.phones.id(id);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 2021-06-18
      相关资源
      最近更新 更多