mongoose-schema - 是不是需要子数组+父文档的 ID?
Posted
技术标签:
【中文标题】mongoose-schema - 是不是需要子数组+父文档的 ID?【英文标题】:mongoose-schema - are both children array + parent doc's ID necessary?mongoose-schema - 是否需要子数组+父文档的 ID? 【发布时间】:2018-02-02 15:18:51 【问题描述】:我正在使用几个一对多模型,并且想知道在孩子中同时拥有一组“子”ObjectID() 和“父”模型的 ObjectID() 的优势是什么。例如:
// a client will have a new card every ten visits
var ClientSchema = new Schema(
first_name: String,
last_name: String,
email: String,
cards: [] // ObjectID()s, <--- is this necessary?
);
var CardSchema = new Schema(
client: ObjectID(), // <--- or is this enough?
visits: []
);
我认为 client: ObjectID()
在大多数情况下应该可以解决问题,尤其是 Mongoose 提供的人口选项。
【问题讨论】:
【参考方案1】:将引用 ObjectId 存储在其中一个文档中就足够了。
您可以在文档或this answer 中阅读,参考字段需要type
和ref
。字段的名称是任意的。完成此操作并注册模型后,您可以使用模型来填充查询。
var clientSchema = new Schema(
first_name: String,
last_name: String,
email: String
);
var cardSchema = new Schema(
client:
type: Schema.Types.ObjectId,
ref: 'client'
);
// models
var Card = mongoose.model('Card', cardSchema);
var Client = mongoose.model('Client', clientSchema);
然而,存储 ObjectId 的数组可能会有所帮助。然而,这也为错误创造了一个巨大的窗口。 SQL 方言中的外键和主键不匹配。如果需要计数,您可以随时进行计数查询。我会说,要么执行上述操作,要么执行此操作:
var clientSchema = new Schema(
first_name: String,
last_name: String,
email: String,
cards: [
type: Schema.Types.ObjectId,
ref: 'card'
]
);
var cardSchema = new Schema(
card_name: String
);
// models
var Card = mongoose.model('Card', cardSchema);
var Client = mongoose.model('Client', clientSchema);
【讨论】:
太棒了!谢谢@PimHeijden!我遇到的每个示例都使用两者,知道为什么吗?也许只进行一次查询,仍然可以访问cards
数组的长度?
谢谢!我现在可以发表评论了。这是我的第一条评论 XO以上是关于mongoose-schema - 是不是需要子数组+父文档的 ID?的主要内容,如果未能解决你的问题,请参考以下文章