MongoDB Upsert

MongoDB Upsert

介绍

在MongoDB中,upsert是一个用于在任何操作中插入和更新值的方法。换句话说,MongoDB的upsert方法是insert和update的组合(insert + update = upsert)。默认情况下,upsert方法的值总是false。如果文档与指定的查询匹配,并且该方法的值设置为true,则更新操作将更新匹配的文档。如果文档与指定的查询不匹配,并且该方法的值设置为true,则该方法将在集合中插入一个新文档。这个新文档包含指示操作的字段。

语法

upsert: <boolean>

upsert选项的值可以是true或false。

使用findAndModify()函数的upsert

用户可以在findAndModify()函数中使用upsert选项。在该函数中,该选项的默认值是false。如果将该选项的值设置为true,则函数执行以下操作之一:

  1. 如果找到与给定查询条件匹配的文档,则findAndModify()函数更新该文档。
  2. 如果没有与给定查询条件匹配的文档,则findAndModify()函数将一个新文档插入到集合中。

    语法

db.Collection_name.findAndModify(
{
    selection_criteria:<document>,
    sort: <document>,
    remove: <boolean>,
    update: <document>,
    new: <boolean>,
    fields: <document>,
    upsert: <boolean>,
    bypassDocumentValidation: <boolean>,
    writeConcern: <document>,
    collation: <document>,
    arrayFilters: [ <filterdocument1>, ? ]
})

示例:

在这个示例中,我们正在处理

Database: javatpoint
Collection: student
Database: three documents that contain details of students
db.student.find().pretty()
{
          "_id" : ObjectID("60353f44f196547db6325eb32"),
          "std_name" : "Jhon",
          "address" : "England"
          "passout" : 2018
}
{
          "_id" : ObjectID("60353f44f196547db6325eb33"),
          "std_name" : "Mike",
          "address" : "Japan"
          "passout" : 2019
}
{
          "_id" : ObjectID("60353f44f196547db6325eb34"),
          "std_name" : "Sam",
          "address" : "Australia"
          "passout" : 2016
}

MongoDB Upsert

现在我们将通过将upsert选项设置为true来在student集合中插入一个新文档。

db.student.findAndModify({query:{name:"Jack"}, 
                            update:{$set:{address:"Australia"}},
                            upsert:true})

在这里,没有与名称”jack”匹配的数据,所以findAndModify()函数插入一个包含两个字段(即”name”和”address”)的新文档,因为upsert方法的值被设置为true。

MongoDB Upsert

使用update()函数进行upsert操作

您可以在update()函数中使用upsert选项。在此函数中,该选项的默认值为false。如果将此选项的值设置为true,则该函数执行以下操作之一:

  1. 如果找到与给定查询条件匹配的文档,则update()函数更新该文档。
  2. 如果没有与给定查询条件匹配的文档,则update()函数将插入一个新的文档到集合中。

语法:

db.Collection_name.update({Selection_criteria}, {$set : {Update_data}}, {
     upsert : <boolean>,
     multi : <boolean>,
     writeConcern : <document>,
     collation : <document>,
     arrayFilters : [ <filterdocument1>, . . . ? ],
     hint :  <document|string>        
   })

示例:

在这个示例中,我们正在处理

Database: javatpoint
Collection: student
Database: three documents that contain details of students
db.student.find().pretty()
{
          "_id" : ObjectID("60353f44f196547db6325eb32"),
          "std_name" : "Jhon",
          "address" : "England"
          "passout" : 2018
}
{
          "_id" : ObjectID("60353f44f196547db6325eb33"),
          "std_name" : "Mike",
          "address" : "Japan"
          "passout" : 2019
}
{
          "_id" : ObjectID("60353f44f196547db6325eb34"),
          "std_name" : "Sam",
          "address" : "Australia"
          "passout" : 2016
}

MongoDB Upsert

现在我们将通过将upsert选项设置为true,在student集合中插入一个新文档。

db.employee.update({name:"Priya"}, {$set: {department: "HR"}},{upsert:true})

这里,没有与名称“Noah”匹配的数据,因此update()函数将插入一个包含两个字段(即,“name”和“address”)的新文档,因为upsert方法的值被设置为true。

MongoDB Upsert

使用运算符表达式进行插入和更新

如果一个文档不匹配给定的数据,并且upsert选项的值设置为true,则更新操作会根据查询参数中的相似性子句创建新的文档,并应用更新参数中的表达式。

示例:

在这个示例中,我们正在处理

Database: javatpoint
Collection: employee
Database: four documents that contain details of employees
> db.employee.find().pretty()
{
              "_id" : ObjectID("60545245fa51254k5634hg412")
              "Employee_ID" : "125"
              "Name" : "Nick"
              "Phone Number" : "6267896546"
}
{
              "_id" : ObjectID("60545245fa51254k5634hg413")
              "Employee_ID" : "129"
              "Name" : "John pie"
              "Phone Number" : "6965453164"
}
{
              "_id" : ObjectID("60545245fa51254k5634hg414")
              "Employee_ID" : "135"
              "Name" : "Jack"
              "Phone Number" : "7516584359"
}
{
              "_id" : ObjectID("60545245fa51254k5634hg415")
              "Employee_ID" : "140"
              "Name" : "Thomas"
              "Phone Number" : "9654778546"
}

MongoDB Upsert

db.employee.update({Name: "Hnery"},   // Query parameter  
                  {set: {Phone Number: '9654785423 '}, // Update documentsetOnInsert: {Gender: 'Male'}},
                  {upsert: true})

在这里,update() 方法根据查询条件创建一个新文档,其字段为 “Name : Hnery”,然后将 set 和setOnInsert 操作应用于此文档。

MongoDB Upsert

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程