Mongoose findOneAndUpdate总是创建一个新文档

时间:2016-01-24 08:50:35

标签: node.js mongodb mongoose

我正在尝试这个:

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和shapes创建一个新文档。

My Shape集合如下:

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

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

2 个答案:

答案 0 :(得分: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

希望这是你想要的

答案 1 :(得分:0)

一种方法是通过验证,你可以用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);
});