MongoDB update upsert 的使用示范

6 min read

假设我们有一个名为“users”的集合,其中包含用户的姓名和年龄。我们要更新或插入一个名称为“Alice”的用户,如果该用户不存在,则新建一个用户。我们可以使用upsert选项来实现这一点。

以下是一个示例代码:

const MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017', function(err, client) {
  if (err) throw err;

  const db = client.db('testdb');
  const collection = db.collection('users');

  const query = { name: 'Alice' };
  const update = { $set: { age: 30 } };
  const options = { upsert: true };

  collection.updateOne(query, update, options, function(err, result) {
    if (err) throw err;
    console.log(result);
    client.close();
  });
});

在这个例子中,我们首先连接到MongoDB服务器并获取“testdb”数据库的“users”集合。然后我们定义一些变量:

  • 查询:我们想要更新或插入的文档。在这种情况下,我们需要使用姓名“Alice”进行查询。
  • 更新:我们要对查询到的文档进行的更改。在这种情况下,我们需要将“age”字段设置为30。
  • 选项:我们需要将upsert选项设置为true,以便在找不到匹配的文档时插入一个新文档。

最后,我们使用updateOne方法来执行更新。该方法接受查询、更新和选项参数,以及一个回调函数,该函数在更新完成后被调用。如果出现错误,我们抛出一个异常;否则,我们将结果输出到控制台,并关闭MongoDB客户端连接。

请注意,如果我们运行这个示例代码多次,我们会看到在第一次运行后,“users”集合中会出现一个新的文档,其中包含姓名为“Alice”和年龄为30。在随后的运行中,该文档将被更新,但不会创建任何新的文档。这是因为upsert选项只在找不到匹配的文档时执行插入操作。