我正在尝试查看一个不允许在数据库中包含多个实例的帖子/创建内容(因此不能重复)。我用updateOne
看着{upsert:true}
,这对我不起作用,因为只有在您拥有一组特定的数据时,它才有效。
示例数据:
cat:{
name: "jim",
age: 8
}
示例模型:
cat:{
name: String
}
我拥有的代码:
object.updateOne(req.body,req.body,{upsert:true},function(err,object){
if(err) console.log(err);
res.json(object);
})
}else{
res.json('error: type: '+ req.params.type + 'not found !');
}
,但这仅在我向模型中添加'age'
时有效。由于{strict:true}
上的updateOne
政策。当我使用帖子时,我会得到同一对象的多个实例。
所以希望有人可以帮助我。 (如果有人对这个问题有更好的标题,请在下面进行评论)。我不知道如何用一句话来描述我的问题。
(请记住,实际上我有100多个属性的数据集,只需要60个)。因此,简单地增加年龄对我的数据集无济于事。因为那时我的文档中有40个未使用的值。
修改:
在查看下面作为答案发布的代码后,我注意到我自己的代码出错。代码就是这样的:
object.updateOne({},req.body,{upsert:true},function(err,object){
if(err) console.log(err);
res.json(object);
})
}else{
res.json('error: type: '+ req.params.type + 'not found !');
}
答案 0 :(得分:1)
请尝试在strict:false
查询中使用update
。它们可能有助于解决您的问题。
var data = { fieldOne: 'Test2', fieldTwo: 'Test3' };
var opts = {
upsert: true,
runValidators: false,
strict: false
};
Model.update({}, data, opts)
.then((success) => {
//success
}).catch(() => {
//error
})