【问题标题】:Mongoose findOneAndUpdate always creating a new documentMongoose findOneAndUpdate 总是创建一个新文档
【发布时间】:2016-04-30 15:41:40
【问题描述】:

我正在尝试这个:

var query= {'boardUrl':data.url,'shapes':data.canvas};
  Shape.findOneAndUpdate(query,query,{upsert:true},function(err,doc){
        if (err){
        console.log(err);
       }

    });

我想要检查我的 Shapes 集合中是否已经有一个具有相同 boardUrl 的文档并更新它。如果不存在,请使用 boardUrl 和形状创建一个新文档。

我的Shape系列如下:

var shapeSchema = mongoose.Schema({
boardUrl: String,
shapes: String
});

始终在创建新文档。你们能看到我的查询有什么问题吗? 谢谢

【问题讨论】:

  • 您通过boardUrl 查询 shapes,但您声明您只想通过boardUrl 查询。
  • 哦,谢谢!如果你把它作为答案,我可以选择它作为答案
  • 很高兴它成功了,已经有类似的答案了,选择这个 ;-)

标签: node.js mongodb mongoose


【解决方案1】:

如果我理解,您的条件还包括等于 'shapes',这是您不想要的。删除它:你的条件应该只检查'boardUrl'

试试:

 var condition = {'boardUrl':data.url};
 var doc = {'boardUrl':data.url,'shapes':data.canvas};
 Shape.findOneAndUpdate(condition,doc,{upsert:true},function(err,doc){
    if (err){
    console.log(err);
 }
 });

这样,当找不到data.url 时,将插入一个新文档。找到后,shapes 将更新为 data.canvas

希望这是你想要的

【讨论】:

    【解决方案2】:

    一种方法是通过验证,您可以使用 findOrCreate 方法,如果存在则查找数据更新,否则在数据库中输入新条目

    Shape.findOrCreate({
     where: shapeCondition
    })
    .spread(function (Shape, created) {
     if (created == false) {
      (write update query)
      return callback(err);
     } else {
    
      return callback(null, data);
     }
    
    }).catch(function (err) {
     err.exception = "error message";
     return callback(err);
    });
    

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 2016-10-15
      • 2017-08-13
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多