我使用了几个一对多模型,想知道在子级中同时拥有一个“子”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提供的人口选项上。
发布于 2017-08-25 01:35:53
将引用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);https://stackoverflow.com/questions/45866730
复制相似问题