MongoDB在数据库中找到一个对象并更新其字段

时间:2018-10-21 13:41:45

标签: node.js mongodb

问题

我有一个连接到MongoDB的NodeJS应用程序。我正在跟踪发生某事的次数。所以,我想要的是:

  1. 检查我的构造对象是否在数据库中(不包括具有出现次数的字段)
  2. 如果是这样,请更新其出现次数+ = 1
  3. 如果不是,则将出现次数设置为1并将其插入

我有一个有效的代码:

  const isInDb = await collection.findOne({
     // match all other fields except for the occurrences field
  });
  if(!isInDb) {
    parsedElement.occurrences = 1;
    await collection.insertOne(parsedElement);
  } else {
    await collection.updateOne(isInDb, { $inc: { "occurrences": 1 } });
  }

我的问题

没有更好的方法吗?理想情况下,它将是类似于collection.findAndUpdate或带有upsert或类似的东西。我写的东西是有功能的,但对我来说似乎效率不高,因为我首先必须查询数据库以进行查找,然后再查询数据库以进行更新。

2 个答案:

答案 0 :(得分:2)

updateOne使用第三个参数作为选项。设置upsert:true。

collection.updateOne({ /* match properties */ }, { $inc: { "occurrences": 1 } }, { upsert: true })

答案 1 :(得分:1)

collection.updateOne({ /* match properties */ }, {
  $set: parsedElement,
  $inc: {
    "occurrences": 1
  }
}, {
  upsert: true
})