mongoose-schema - 必须是子数组+父文档的ID吗?

时间:2017-08-24 16:26:48

标签: node.js mongodb mongoose mongoose-schema database

我使用了一对一对多的模型,并想知道同时拥有一系列儿童和#34; ObjectID()s和" parent" model中的模型的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 个答案:

答案 0 :(得分:1)

将引用ObjectId存储在其中一个文档中就足够了。

您可以在文档或this answer中阅读,参考字段需要typeref。字段的名称是任意的。完成此操作并注册模型后,您可以使用模型填充查询。

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);