猫鼬更新(如果存在),否则创建一个新的

时间:2019-09-30 08:39:35

标签: javascript node.js mongoose

我正在将数据保存到数据库中,并努力更新现有文档。我希望我的应用检查文档是否已存在以及信息是否已更改。如果该文档存在且信息未更改,则应用会跳过该文档。一切正常。如果数据已更改,我还希望它更新文档。我该如何实现?

这是我负责保存数据的代码:

const hash = md5(price + km);

const query = {
            hash: hash
          },
          options = { upsert: true };

        Car.findOneAndUpdate(query, options, function(error, result) {
          if (!error) {
            if (!result) {
              result = new Car({
                make: make,
                model: model,
                year: yearInt,
                km: kmInt,
                price: priceInt,
                currency: currency,
                link: link,
                imageUrls: images,
                hash: hash
              });
              result.save(function(error) {
                if (!error) {
                  console.log('car saved!' + result);
                } else {
                  throw error;
                }
              });
            } else {
              console.log('already in db');
            }
          } else {
            console.log(error);
          }
        });

如您所见,我正在使用md5包为要保存到数据库的每辆车创建一个哈希。它使用公里和价格组合来创建哈希。因此,当“公里”或“价格”变量的数据更改时,哈希值也会更改。而如果需要的话,我想更新数据库中的公里数和/或价格数据。我应该使用_id而不是哈希来查找文档吗?

我也尝试这样的事情,以查看哈希是否已更改但无法正确处理:

if (query.hash != result.hash) {
                    car.update({
                      make: make,
                      model: model,
                      year: yearInt,
                      km: kmInt,
                      price: priceInt,
                      currency: currency,
                      link: link,
                      imageUrls: images,
                      hash: hash
                    });
                  }

如果有人能以此将我推向正确的方向,我将不胜感激。

0 个答案:

没有答案