0

有一个项目集合和一个类别集合,我想将它们关联起来,考虑到所有查询都将针对项目集合进行,并且类别总是包含很少的文档。我不想依赖数字或自动生成的 mongodb 哈希 id 用于类别,因为以这种方式在每个项目中设置类别更加灵活且易于阅读:myItem.category ='CATEGORY_CODE'。这允许任何客户端仅使用可以存储在本地并且与本机 mongodb id 相对的可预测的类别代码。

以下是模型:

//Item.js

var ItemSchema = new Schema({
  name: { type: String, default: 'default_name', trim: true },
  category: { type: Schema.Types.ObjectId, ref: 'Category' },

});

mongoose.model('Item', UserSchema)


//Category.js

// Note: 'uncat' is the category code for 'uncategorized'
var CategorySchema = new Schema({
  _id: { type: String, default: 'uncat', lowercase: true, trim: true },
  translation: [ { lang_code: String, text: String}]


});
mongoose.model('Category', CategorySchema);

所以问题是:

是否可以(并且建议)禁用 CategorySchema 中的“_id”字段并使用另一个字段(即“代码”)并从 Item.Category 引用 CategorySchema.code?你知道另一种可以匹配这种情况的策略吗?

类别架构将是这样的:

var CategorySchema = new Schema({
  code: { type: String, default: 'uncat', lowercase: true, trim: true },
  translation: [ { lang_code: String, text: String}]
}
_id: false
);
4

1 回答 1

0

我自己现在也面临着类似的问题。

据我所知,您不能“禁用” _id 字段。您可以将其定义为其他内容,就像您在 CategorySchema 上所做的那样。

在 ItemSchema 上,您应该将类​​别更改为:

category: { type: String, ref: 'Category' }

由于 CategorySchema 上的 _id 是字符串,而不是 ObjectId。

但是,这对我目前不起作用(至少不像我预期的那样)。当我这样做时,我可以插入集合中不存在的值并保存模型而不会出错。因此,模型保存时未验证参考。

于 2013-10-08T16:30:41.607 回答