没有重复的猫鼬帖子

Posted

技术标签:

【中文标题】没有重复的猫鼬帖子【英文标题】:mongoose post without duplications 【发布时间】:2019-03-17 10:29:20 【问题描述】:

我正在尝试查看不允许数据库中有多个实例的发布/创建(因此没有重复)。我查看了updateOneupsert: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 放了两次。因此查询搜索模型中没有的属性。傻我>_

以上是关于没有重复的猫鼬帖子的主要内容,如果未能解决你的问题,请参考以下文章

q node.js,猫鼬的“帖子”之后的回调[重复]

没有模式的猫鼬

.find 的猫鼬选项 [重复]

使用KeystoneJs的猫鼬两级人口[重复]

当我需要用和子句分隔查询时,在猫鼬中有两个“或”子句[重复]

使用猫鼬填充时返回一个空的帖子数组