【问题标题】: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 !');
    }

【问题讨论】:

    标签: mongodb mongoose mongodb-query mongoose-schema strict


    【解决方案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 放了两次。因此查询搜索模型中没有的属性。傻我>_
    猜你喜欢
    • 2014-08-21
    • 2020-07-25
    • 2016-01-15
    • 1970-01-01
    • 2020-08-05
    • 2015-06-03
    • 2013-02-23
    • 2018-08-27
    • 1970-01-01
    相关资源
    最近更新 更多