我尝试使我的模式起作用,但:(
Schema({
name: String
text: [
{
name: String,
language: {
type: String,
required: true,
unique: true
}
}
]
})
如果我希望他们不能以相同的语言添加2个文本,我该怎么办?
let texte = [
{ name: "first", language: "English" },
{ name: "duplicate", language: "English" }
];
newData.text.addToSet(texte[0]);
newData.text.addToSet(texte[1]);
newData.text.addToSet(texte[1]);
如果我用相同的语言推送重复的文本,我不会出错
{
"_id": "5c6aff3e6c895637094427d7",
"text": [
{
"_id": "5c6aff3e6c895637094427d8",
"name": "first",
"language": "English"
},
{
"_id": "5c6aff3e6c895637094427d9",
"name": "duplicate",
"language": "English"
},
{
"_id": "5c6aff3e6c895637094427da",
"name": "duplicate",
"language": "English"
},
],
"name": "test"
}
我希望有办法:(
答案 0 :(得分:0)
将unique设置为true不会在创建或更新之前检查数据库中是否有重复数据。在创建或更新文档之前,您必须检查自己。将unique设置为true会为mongodb中的该字段添加唯一索引。它的用法不是您的想法。
您可以做的是首先运行查询,以检查文档是否已经存在且您要唯一的字段。
Colection.find({ "text.name": "duplicate", "text.language": "English" })
.then(doc => {
if(doc) {
// handle duplicate case
} else {
// create new
}
})
或者,如果要在将数据保存到数据库之前对其进行验证,则可以使用诸如JOI之类的验证库。这将处理您用于处理模式验证的大多数用例。