MongoDB文档翻译-CRUD操作-删除文档

来源:互联网 发布:yum 安装pip 编辑:程序博客网 时间:2024/06/05 09:30

英文原文地址:https://docs.mongodb.com/v3.2/tutorial/remove-documents/。
本文章属个人翻译,作个人学习之用,如有雷同,纯属巧合。如有错误之处,欢迎指正。

删除文档

删除方法

MongoDB提供了以下方法删除集合中的文档:

db.collection.remove() 删除单个或所有匹配指定过滤器的文档 db.collection.deleteOne() 最多删除一个匹配的文档。版本3.2新增 db.collection.deleteMany() 删除所有匹配的文档。版本3.2新增

可以指定约束条件/过滤器指定要删除的文档。这个过滤器使用同读操作同样的语法:

  • 一个查询过滤文档,用<field>:<value>表达式来指定相等条件,选择<field>字段等于<value>的文档:

    { <field1>: <value1>, ... }
  • 查询过滤文档可以使用查询操作符来指定条件,形式如下:

    { <field1>: { <operator1>: <value1> }, ... }

    删除行为

     索引

    删除操作不会删除索引,即使从一个集合中删除所有文档。

    原子

    MongoDB中,在单个文档级别,所有的写操作都是原子的。关于MongoDB和原子的更多信息,请参考**原子和事务。

    示例集合

    该篇文档举了几个在mongoshell中删除文档的操作。要填充下面例子中用到的users集合,在mongoshell中运行:

    >

    注意:
    如果users集合已经包含了相同_id的集合,插入文档前需要删除该集合(db.users.drop()

    db.users.insertMany(  [     {       _id: 1,       name: "sue",       age: 19,       type: 1,       status: "P",       favorites: { artist: "Picasso", food: "pizza" },       finished: [ 17, 3 ],       badges: [ "blue", "black" ],       points: [          { points: 85, bonus: 20 },          { points: 85, bonus: 10 }       ]     },     {       _id: 2,       name: "bob",       age: 42,       type: 1,       status: "A",       favorites: { artist: "Miro", food: "meringue" },       finished: [ 11, 25 ],       badges: [ "green" ],       points: [          { points: 85, bonus: 20 },          { points: 64, bonus: 12 }       ]     },     {       _id: 3,       name: "ahn",       age: 22,       type: 2,       status: "A",       favorites: { artist: "Cassatt", food: "cake" },       finished: [ 6 ],       badges: [ "blue", "red" ],       points: [          { points: 81, bonus: 8 },          { points: 55, bonus: 20 }       ]     },     {       _id: 4,       name: "xi",       age: 34,       type: 2,       status: "D",       favorites: { artist: "Chagall", food: "chocolate" },       finished: [ 5, 11 ],       badges: [ "red", "black" ],       points: [          { points: 53, bonus: 15 },          { points: 51, bonus: 15 }       ]     },     {       _id: 5,       name: "xyz",       age: 23,       type: 2,       status: "D",       favorites: { artist: "Noguchi", food: "nougat" },       finished: [ 14, 6 ],       badges: [ "orange" ],       points: [          { points: 71, bonus: 20 }       ]     },     {       _id: 6,       name: "abc",       age: 43,       type: 1,       status: "A",       favorites: { food: "pizza", artist: "Picasso" },       finished: [ 18, 12 ],       badges: [ "black", "blue" ],       points: [          { points: 78, bonus: 8 },          { points: 57, bonus: 7 }       ]     }  ])

删除所有文档

要从集合中删除所有文档,传递一个空过滤文档{}给db.collection.deleteMany()db.collection.remove()方法。

db.collection.deleteMany()

下面的例子使用db.collection.deleteMany()方法从users集合中删除所有文档:

db.users.deleteMany({})

该方法返回一个文档,包含操作状态:

{ "acknowledged" : true, "deletedCount" : 7 }

欲知更多信息和例子,查看db.collection.deleteMany()

db.collection.remove()

以下例子使用db.collection.remove()方法从users集合中删除所有文档:

db.users.remove({})

要从集合中删除所有文档,用db.collection.drop()方法效率可能会更高,该方法不仅删除整个集合,而且连索引也一起删除,然后重新创建集合,重建索引。

删除匹配条件的所有文档

要删除匹配删除条件的所有文档,传递一个过滤器参数给db.collection.deleteMany()方法或db.collection.remove()方法。

db.collection.deleteMany()

下面的例子用db.collection.deleteMany()users集合中删除status字段等于”A”的所有文档:

db.users.deleteMany({ status : "A" })

该方法返回一个文档,包含操作状态:

{ "acknowledged" : true, "deletedCount" : 3 }

db.collection.remove()

以下例子使用db.collection.remove()方法从users集合中删除status字段等于”P”的所有文档:

db.users.remove( { status : "P" } )

对于大量的删除操作,先把想留在集合中的文档复制出来,然后用db.collection.drop()删除整个集合可能会更有效率。

只删除匹配条件的一个文档

若需要最多删除一个匹配的文档,即使可能多个文档匹配指定的过滤器,使用db.collection.deleteOne()方法或把<justOne>参数设为true或者1的db.collection.remove()方法。

db.collection.deleteOne()

下面的例子用db.collection.deleteOne()方法来删除status字段是”D”的第一个文档:

db.users.deleteOne( { status: "D" } )

db.collection.remove()

下面的例子使用db.collection.remove()方法,把<justOne>参数设为1,删除status字段是”D”的第一个文档:

db.users.remove( { status: "D" }, 1)

其它方法

0 0