没有重复的猫鼬帖子
Posted
技术标签:
【中文标题】没有重复的猫鼬帖子【英文标题】:mongoose post without duplications 【发布时间】:2019-03-17 10:29:20 【问题描述】:我正在尝试查看不允许数据库中有多个实例的发布/创建(因此没有重复)。我查看了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'
添加到我的模型时才有效。由于updateOne
上的strict:true
政策。当我使用帖子时,我会得到同一个对象的多个实例。
所以希望有人可以帮助我。 (如果有人知道这个问题的更好标题,请在下面评论)。我不知道如何用 1 句话描述我的问题。
(请记住,实际上我有一个包含 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 !');
【问题讨论】:
【参考方案1】:请尝试在update
查询中使用strict:false
。它们可能有助于解决您的问题。
var data = fieldOne: 'Test2', fieldTwo: 'Test3' ;
var opts =
upsert: true,
runValidators: false,
strict: false
;
Model.update(, data, opts)
.then((success) =>
//success
).catch(() =>
//error
)
【讨论】:
这对我不起作用。因为现在年龄也被添加了。 那么,您需要什么?年龄被丢弃? 在正常的发布请求中,您可以使用模型作为您想要的属性的过滤器。我必须只使用该系统而没有任何重复。所以在这个例子中,我只希望名称在数据库中。 (实际上我需要一个对象的 100 个属性中的 60 个) 谢谢,又看了一遍。我注意到我在自己的代码中做错了。我不小心把 req.body 放了两次。因此查询搜索模型中没有的属性。傻我>_以上是关于没有重复的猫鼬帖子的主要内容,如果未能解决你的问题,请参考以下文章