【发布时间】:2018-07-19 12:31:01
【问题描述】:
我在猫鼬中有一个基本模式和一个派生模式。如果我从一个新的数据库开始并创建第一个基本文档,那么一切都很好。然而,第二次创建永远不会成功并出现警告代码:
(node:7584) UnhandledPromiseRejectionWarning: UnhandledPromiseRejectionWarning: Unhandled Promise Rejection (rejection id: 1): BulkWriteError: E11000 duplicate key error collection: somedb.base index: name_1 dup key: { : null }
尽管如此,我可以创建任意数量的派生文档。 如果我删除鉴别器部分,并将基础和派生存储在不同的集合中,那么一切都可以。所以我认为我继承模型的方式有问题。
base.js
var db = require('../config/db');
var Schema = db.Schema;
var baseSchema = new Schema({
lat: {
type: Schema.Types.Number,
required: true
},
lon: {
type: Schema.Types.Number,
required: true
}
}, {discriminatorKey: 'kind'})
var Base = db.model('base', baseSchema);
module.exports = Base;
派生的.js
var db = require('../config/db');
var Schema = db.Schema;
var derivedSchema = new Schema({
name: {
type: Schema.Types.String,
required: true,
unique: true
},
type: {
type: Schema.Types.ObjectId,
ref: 'base',
required: true
}
}, {discriminatorKey: 'kind'})
var Base = db.model("base");
var Derived = Base.discriminator('derived', derivedSchema);
module.exports = Derived;
更新
重复键错误是因为在派生模型中,名称是唯一的。当我插入基础文档时,名称始终为空,这就是它重复的原因。但是,我希望名称是唯一的,但前提是它是派生文档。怎么办?
【问题讨论】: