【问题标题】:Is it alright to have a field type of ObjectId in a mongoose schema在猫鼬模式中有一个 ObjectId 的字段类型可以吗
【发布时间】:2014-12-12 02:20:48
【问题描述】:

假设我将在 mongodb 中建立多对一关系,

var mongoose = require('mongoose');
var Schema   = mongoose.Schema,
    ObjectID = Schema.Types.ObjectId;


var productSchema = new Schema({
   supplier: {
      _id: ObjectId,
      name: String
   }
});

我读过一篇关于 6 Rules of Thumb for MongoDB Schema Design 的 mongodb 博文,并读到:

只有在读取与更新的比率很高时,反规范化才有意义。如果您会经常读取非规范化数据,但很少更新它

由于supplier 不经常更新,我决定对其名称进行非规范化,但仍保留_id,因此当我必须更新它时,我有一些参考。

我决定使用ObjectId 作为type,但我还没有实际测试过它是否有效,我已经想知道,如果我做得对,如果使用String 类型会更实用。

【问题讨论】:

    标签: mongodb mongoose schema


    【解决方案1】:

    你肯定想在那里使用ObjectId,但还要定义一个ref,告诉Mongoose它指的是哪个模型,这样当你需要完整的供应商对象时,你可以使用Mongoose的参考population

    var productSchema = new Schema({
       supplier: {
          _id: { type: ObjectId, ref: 'Supplier' },
          name: String
       }
    });
    

    这使您可以执行以下操作:

    Product.findById(id).populate('supplier._id').exec(err, product) {
        // product.supplier._id is the full Supplier doc instead of just the _id
    });
    

    【讨论】:

    • 直到现在我还没有机会阅读 ref。如果这个技术可以做一些好的事情,你能指出一些,所以我可以选择这个作为答案,谢谢!
    猜你喜欢
    • 2020-12-16
    • 2017-12-13
    • 1970-01-01
    • 2016-02-07
    • 2014-03-27
    • 2022-01-08
    • 2020-08-15
    • 2018-03-04
    • 1970-01-01
    相关资源
    最近更新 更多