如果 MongoDB 中的值唯一则仅插入,否则更新


你可以使用插入更新,即每当你插入一个值且它已存在时则执行更新。如果值尚不存在,则会插入该值。

首先让我们创建一个包含文档的集合

> db.onlyInsertIfValueIsUniqueDemo.insertOne({"StudentName":"Larry","StudentAge":22});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9a633815e86fd1496b38a4")
}
> db.onlyInsertIfValueIsUniqueDemo.insertOne({"StudentName":"Mike","StudentAge":21});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9a634a15e86fd1496b38a5")
}
> db.onlyInsertIfValueIsUniqueDemo.insertOne({"StudentName":"Sam","StudentAge":24});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9a635015e86fd1496b38a6")
}

以下是查找方法显示集合中所有文档的查询

> db.onlyInsertIfValueIsUniqueDemo.find().pretty();

这将产生以下输出

{
   "_id" : ObjectId("5c9a633815e86fd1496b38a4"),
      "StudentName" : "Larry",
"StudentAge" : 22
}
{
   "_id" : ObjectId("5c9a634a15e86fd1496b38a5"),
   "StudentName" : "Mike",
   "StudentAge" : 21
}
{
   "_id" : ObjectId("5c9a635015e86fd1496b38a6"),
   "StudentName" : "Sam",
   "StudentAge" : 24
}

用例 1:以下是在值已存在时的查询。由于你插入的值已存在,因此它得到更新

> db.onlyInsertIfValueIsUniqueDemo.update({StudentName:"Mike"},{$set:{"StudentAge":27}},{ upsert: true});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

再次查看所有文档。以下查询

> db.onlyInsertIfValueIsUniqueDemo.find().pretty();

这将产生以下输出

{
   "_id" : ObjectId("5c9a633815e86fd1496b38a4"),
   "StudentName" : "Larry",
   "StudentAge" : 22
}
{
   "_id" : ObjectId("5c9a634a15e86fd1496b38a5"),
   "StudentName" : "Mike",
   "StudentAge" : 27
}
{
   "_id" : ObjectId("5c9a635015e86fd1496b38a6"),
   "StudentName" : "Sam",
   "StudentAge" : 24
}

用例 2:以下是在值唯一时的查询。由于你插入的值尚不存在,因此它得到插入

>db.onlyInsertIfValueIsUniqueDemo.update({StudentName:"David"},{$set:{"StudentAge":25}},{ upsert: true});
WriteResult({
   "nMatched" : 0,
   "nUpserted" : 1,
   "nModified" : 0,
   "_id" : ObjectId("5c9a654ce628c11759caea54")
})

再次查看所有文档。以下查询

> db.onlyInsertIfValueIsUniqueDemo.find().pretty();

这将产生以下输出

{
   "_id" : ObjectId("5c9a633815e86fd1496b38a4"),
   "StudentName" : "Larry",
   "StudentAge" : 22
}
{
   "_id" : ObjectId("5c9a634a15e86fd1496b38a5"),
   "StudentName" : "Mike",
   "StudentAge" : 27
}
{
   "_id" : ObjectId("5c9a635015e86fd1496b38a6"),
   "StudentName" : "Sam",
   "StudentAge" : 24
}
{
   "_id" : ObjectId("5c9a654ce628c11759caea54"),
   "StudentName" : "David",
   "StudentAge" : 25
}

更新于: 30-Jul-2019

658 次浏览

职业生涯腾飞

完成课程获得认证

开始
广告