Mongodb 在mongoose模式中使用ObjectId字段类型可以吗

Mongodb 在mongoose模式中使用ObjectId字段类型可以吗,mongodb,mongoose,schema,Mongodb,Mongoose,Schema,比如说,我将在mongodb建立多对一关系 var mongoose = require('mongoose'); var Schema = mongoose.Schema, ObjectID = Schema.Types.ObjectId; var productSchema = new Schema({ supplier: { _id: ObjectId, name: String } }); 我读过mongodb的一篇博文,内容是: 只

比如说,我将在mongodb建立多对一关系

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


var productSchema = new Schema({
   supplier: {
      _id: ObjectId,
      name: String
   }
});
我读过mongodb的一篇博文,内容是:

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

由于
供应商
不经常更新,我决定对其名称进行非规范化,但仍保留
\u id
,因此当我必须更新时,我有一些参考


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

你肯定想在那里使用
ObjectId
,但也要为它定义一个
ref
,告诉Mongoose它所指的模型,以便在需要完整的供应商对象时可以使用Mongoose的参考:

var-productSchema=新模式({
供应商:{
_id:{type:ObjectId,ref:'Supplier'},
名称:String
}
});
这使您能够执行以下操作:

Product.findById(id).populate('supplier.\u id').exec(err,Product){
//product.supplier.\u id是完整的供应商文档,而不仅仅是\u id
});

到目前为止,我还没有机会阅读ref。如果这项技术能做一些好的事情,你能指出一些吗?所以我可以选择这个作为答案,谢谢!