我试图将一些数据导入MongoDB,但一直遇到此错误。MongoBulkWriteError: E11000 duplicate key error collection: MyDB.clist_list index: clients.email_1 dup key: { clients.email: null }
产品型号:
interface Client {
name: string;
email: string;
}
interface Agent {
pipedrive_id: number;
name: string;
clients?: Array<Client>;
}
const clientSchema = new Schema<Client>({
name: { type: String, required: true },
email: {
type: String,
trim: true,
lowercase: true,
unique: true,
validate: {
validator(str: string) {
return /^\w+([\\.-]?\w+)*@\w+([\\.-]?\w+)*(\.\w{2,3})+$/.test(str);
},
message: 'Please enter a valid email',
},
required: [true, 'Email required'],
},
});
const agentSchema = new Schema<Agent>({
pipedrive_id: { type: Number, required: true },
name: String,
clients: [clientSchema],
});
const AgentClients = model<Agent>('client_list', agentSchema);
正如你在模型中看到的,clients集合是可选的,而且每次运行DB时,DB都会被删除并完全创建(只是为了测试,这样就不会留下索引之类的东西)。
这是有效载荷。
[
{
first_name: 'Jen Test',
pipedrive_id: 2186,
clients: []
},
{
name: 'Carl Test',
pipedrive_id: 2191,
clients: []
}
]
这就是我困惑的地方。当没有Clients
时,email
怎么会有null
的重复值???
我在Model上使用insertMany
方法来插入数据(如果这有帮助的话)。
我知道在这个问题上有很多类似的问题,但没有一个有我的具体问题。
1条答案
按热度按时间huwehgph1#
您在clientSchema中的
email
属性上指定了unique: true
。由于您的两个输入都没有指定email
,MongoDB将假定它是null
。所以你有一个冲突。在一边你指定
email
必须是唯一的,而在另一边你试图插入两个具有相同的null
值email
的文档。如果要保持
email
字段的唯一性,并在同一时间允许null
值,则应检查Sparse Indexes。在架构中,应传递附加属性
sparse: true
。