猿教程 Logo

.Net连接MongoDb:删除

介绍

在上一篇文章中,我们研究了MongoDb中各种更新操作的范围。 我们讨论了许多运算符的使用,如$ unset和一组用于数组的运算符,如$ push和$ addToSet。 最后,我们研究了一个upsert操作的作用,它是update和insert的组合:如果文档存在,则更新一个文档,否则插入一个新的。

在这篇文章中,我们将通过查看删除来完成MongoDb中的CRUD操作。

删除功能

一个DELETE在MongoDb中称为remove,相应的函数也称为remove。 它需要一个过滤器文档来指定要删除的文档。 过滤器文档具有与查找和更新的情况相同的角色和JSON语法。 因此,到目前为止,我们学到的所有查询技术都可以在这里被重用。

在这一点上,我们在模型数据库上有一个小人物集合,具有以下记录:

{ "_id" : ObjectId("57055d25b98ee40de403824d"), "name" : "john", "sport" : "football", "points" : 32, "foods" : [ "fish", "chips", "chocolate" ] }
{ "_id" : ObjectId("57055d6cb98ee40de403824f"), "name" : "john", "sport" : "baseball", "points" : 32, "foods" : [ "fish", "chips", "chocolate" ] }
{ "_id" : ObjectId("57055d9bb98ee40de4038250"), "name" : "mary", "sport" : "football", "points" : 5, "foods" : [ "fish", "chips", "chocolate" ] }
{ "_id" : ObjectId("57055daeb98ee40de4038251"), "name" : "susan", "sport" : "racketball", "points" : 22, "foods" : [ "fish", "lamb", "lamb", "chocolate" ] }
{ "_id" : ObjectId("57055dcab98ee40de4038252"), "name" : "abdul", "sport" : "cricket", "points" : 13, "foods" : [ "fish", "chips", "rice", "chocolate" ] }
{ "_id" : ObjectId("57055e0fb98ee40de4038253"), "name" : "kelly", "sport" : "tennis", "points" : 5, "foods" : [ "chips", "falafel", "chocolate", [ "pasta", "pizza", "falafel", "chips" ] ] }
{ "_id" : ObjectId("570ff0b4ce1104160e789021"), "name" : "andrew", "sport" : "swimming" }

我们删除不完整的Andrew文档:

db.people.remove({"name" : "andrew"})

name属性等于“andrew”的唯一文档被删除:

WriteResult({ "nRemoved" : 1 })

让我们看看如果我们不提供任何过滤器文档,会发生什么:

db.people.remove()

我们得到一个响亮的NOPE:

2016-04-18T20:56:10.599+0200 E QUERY [thread1] Error: remove needs a query :

DBCollection.prototype._parseRemove@src/mongo/shell/collection.js:333:1

DBCollection.prototype.remove@src/mongo/shell/collection.js:356:18

@(shell):1:1

所以第一个查询文件是强制性的。

如果要从集合中逐个删除所有文档,那么我们可以提供一个空查询文档,就像我们在更新函数的情况下看到的那样:

db.people.remove({})

这对于大集合来说不是一个非常有效的操作。 但是,它将使诸如索引的元数据保持不变。

如果您需要以有效的方式从集合中删除所有文档,那么drop()函数可以帮助:

db.people.drop()

但是它也会擦除所有其他有关收集的信息。

现在让我们尝试删除食物阵列中包含“芯片”的所有人:

db.people.remove({"foods" : "chips"})

它从6中删除了5个文档。换句话说,remove函数删除与查询文档匹配的所有文档。 这与仅在默认情况下更新第一个匹配文档的更新功能相反。

请注意,删除许多文档不是原子操作。 这意味着文档可以由find函数返回,即使它将作为删除操作的一部分被删除。

我们完成了MongoDb shell中的CRUD操作。 在下一篇文章中,我们将介绍MongoDb .NET驱动程序。


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