猿教程 Logo

.Net连接MongoDb:各种其他更新操作

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

介绍

在上一篇文章中,我们开始研究如何在MongoDb客户端中执行更新。 我们通过一些示例看到了更新功能。 更新的最基本用法在客户端是麻烦的,因为它只是用一个新的替换现有的文档。 幸运的是有各种$运算符可以让我们更新文档的一个属性。 我们也看到了“多”论的作用。 如果设置为true,则更新功能将更新与搜索条件匹配的每个单个文档。 否则只有第一个匹配的文档将被更新。

在这篇文章中,我们将介绍与更新有关的各种其他操作。

完全移除属性

$ unset运算符与我们在上一篇文章中看到的$ set相反。 我不想从我们的演示数据库“餐馆”和“邮政编码”中删除任何属性。 我将重新使用我们之前构建的这些小人物集合。 每个文档都有一个名为“language”的属性。 让我们把它删除为玛丽:

db.people.update({"name" : "mary"}, {$unset: {"language" : 1}});

这是玛丽:

{ "_id" : ObjectId("57055d9bb98ee40de4038250"), "name" : "mary", "sport" : "football", "points" : 5 }

实际上,我们可以从空的搜索字词中删除每个文档的语言属性:

db.people.update({}, {$unset: {"language" : 1}}, {multi : true});

人员集合中所有文档的语言属性已被删除。

阵列相关更新

对于这些例子,我们首先在人物集合中的每个文档中添加一个数组字段:

db.people.update({}, {$set : {"foods" : ["fish", "chips", "chololate"]}}, {multi: true});

我们刚刚在人物集合中的每个文档中添加了一个新的数组属性,并将其初始化为相同的3个项目。

可以在MongoDb中以各种方式更新数组和数组元素。 我们一个接一个地穿过它们。

$ set运算符可用于通过其索引为0的索引来更新数组中的单个元素。 例如。 苏珊不再喜欢鱼了,我们知道鱼在每个阵列中都有1号。 我们会把它改成羊肉:

db.people.update({"name" : "susan"}, {$set : {"foods.1" : "lamb"}});

注意在数组属性的名称后面带有索引的点符号。 这是苏珊:

{ "_id" : ObjectId("57055daeb98ee40de4038251"), "name" : "susan", "sport" : "racketball", "points" : 22, "foods" : [ "fish", "lamb", "chololate" ] }

如果我们提供一个不合适的索引,会发生什么情况?

db.people.update({"name" : "susan"}, {$set : {"foods.6" : "lamb"}});

MongoDb通过向缺失的位置添加null来解决此问题:

{ "_id" : ObjectId("57055daeb98ee40de4038251"), "name" : "susan", "sport" : "racketball", "points" : 22, "foods" : [ "fish", "lamb", "chololate", null, null, null, "lamb" ] }

$ push操作符可以让我们在数组的末尾添加一个新项:

db.people.update({"name" : "abdul"}, {$push : {"foods" : "rice"}});

这是阿卜杜勒:

{ "_id" : ObjectId("57055dcab98ee40de4038252"), "name" : "abdul", "sport" : "tennis", "points" : 13, "foods" : [ "fish", "chips", "chololate", "rice" ] }

我们可以通过$ pop操作符和整数参数从数组的开始或尾部弹出一个项目。 1将弹出最右边,-1最左边的元素:

db.people.update({"name" : "kelly"}, {$pop : {"foods" : -1}});
{ "_id" : ObjectId("57055e0fb98ee40de4038253"), "name" : "kelly", "sport" : "tennis", "points" : 5, "foods" : [ "chips", "chololate" ] }

我们可以使用$ pushAll运算符一次添加多个元素:

db.people.update({"name" : "kelly"}, {$pushAll : {"foods" : ["pasta", "pizza", "falafel"]}});
{ "_id" : ObjectId("57055e0fb98ee40de4038253"), "name" : "kelly", "sport" : "tennis", "points" : 5, "foods" : [ "chips", "chololate", "pasta", "pizza", "falafel" ] }

我们也可以通过$ pull操作符的值删除元素。 我们将从凯利的食物阵列中去除鱼类:

db.people.update({"name" : "kelly"}, {$pull : {"foods" : "fish"}});
{ "_id" : ObjectId("57055e0fb98ee40de4038253"), "name" : "kelly", "sport" : "tennis", "points" : 5, "foods" : [ "chips", "chololate", "pasta", "pizza", "falafel" ] }

我其实刚刚注意到我有巧克力的打字错误。 我们可以轻松更新:

db.people.update({}, {$pull : {"foods" : "chololate"}}, {multi : true})
db.people.update({}, {$push : {"foods" : "chocolate"}}, {multi : true})

我们还从食物数组中删除所有的空值:

db.people.update({}, {$pull : {"foods" : null}}, {multi : true})

我们也有一个$ pullAll运算符一次删除多个项目。 只有那些项目将从数组中删除,当然:

db.people.update({"name" : "kelly"}, {$pullAll : {"foods" : ["pasta", "pizza", "tacos"]}})

面食和披萨将从凯利的食物阵列中移除,炸玉米饼将被忽视。

如果我们要在数组中只保留唯一的值,$ addToSet运算符非常有用。 例如。 食物阵列应该不会保留重复的项目。 所以$ addToSet会将这些项目添加到一个数组,只有当它不包含一个:

相关实例:

db.people.update({"name" : "kelly"}, {$addToSet : {"foods" : ["pasta", "pizza", "falafel", "chips"]}})

只有意大利面和披萨将添加到凯利的食物阵列,因为它已经包含沙拉和薯条。

Upserts

为了整理这篇文章和更新,我们将会看看一下插件。 一个upsert是更新和插入的组合。 这是一个常见的要求,如果一个对象被提供给更新操作,那么如果这些属性已经有一个项目,那么它被更新,否则插入一个新的。 可以使用“upsert”操作符执行升级程序,其方式与将多操作符附加到更新查询相同。 以下是一个现有项目Abdul将其运动属性更新为板球的示例:

db.people.update({"name" : "abdul"}, {$set : {"sport" : "cricket"}}, {upsert : true})

另一方面,如果我们尝试更新不存在的文档的运动属性,就像这样:

db.people.update({"name" : "andrew"}, {$set : {"sport" : "swimming"}}, {upsert : true})

那么我们将从服务器得到一个不同的响应类型:

WriteResult({
        "nMatched" : 0,
        "nUpserted" : 1,
        "nModified" : 0,
        "_id" : ObjectId("570ff0b4ce1104160e789021")
})

升序数是1.这是安德鲁:

{ "_id" : ObjectId("570ff0b4ce1104160e789021"), "name" : "andrew", "sport" : "swimming" }

这些是MongoDb中更新的主要功能。 在下一篇文章中,我们将看看删除内容。

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CsharpMongo/11.html