如何在Mongoose中查找记录并插入相同的记录?

时间:2017-02-21 13:55:43

标签: node.js mongodb mongoose

这里我想得到一条记录,我需要稍加修改才能插入相同的记录。但我无法在新记录中看到我在记录中找到的数据。这是我尝试过的,有人可以帮助我吗?我认为问题在于这一行var institution = new Institution(data);

 Institution.find({_id:i._id}).exec(function (err, result) {
               if(result)
                transferData(result);
              }
            });
          });
      }

      function transferData(data){
         var institution = new Institution(data);
          institution.name = 'xxxx';
          institution.save(function (err, data) {
            if (err) {
              return res.status(400).send({ message: errorHandler.getErrorMessage(err) });
            } else {
              console.log('Data Inserted Successfully');
            }
          });
      }

1 个答案:

答案 0 :(得分:0)

find() 会返回与回调中的条件匹配的文档数组,因此该行

var institution = new Institution(data);

将无效,因为它期望Document不是数组。

您可以使用 findById() 方法:

Institution.findById(i._id).exec(function (err, result) {
    if (result) transferData(result);
});          

function transferData(data) {
    var institution = new Institution(data);
    institution.name = 'xxxx';
    institution.save(function (err, data) {
        if (err) {
            return res.status(400).send({ message: errorHandler.getErrorMessage(err) });
        } else {
            console.log('Data Inserted Successfully');
        }
    });
}

更好的方法是使用 findByIdAndUpdate() 方法:

Institution.findByIdAndUpdate(i._id, {name: 'xxxx'}, {upsert: true}, function (err, data) {
    if (err) {
        return res.status(400).send({ message: errorHandler.getErrorMessage(err) });
    } else {
        console.log('Data Inserted Successfully');
    }
);