虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > MongoDB数据库 > MongoDB文档翻译-CRUD操作-删除文档

MongoDB文档翻译-CRUD操作-删除文档
类别:MongoDB数据库   作者:码皇   来源:<a href="http://blog.csdn.net/chunyuan314" target="_blank" rel="nofollow   点击:

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

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

删除文档

删除方法

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

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

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

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

    {
    : , ... }

查询过滤文档可以使用查询操作符来指定条件,形式如下:

    {
    : {
    : }
    , ... }

删除行为

 索引

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

原子

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()方法或把参数设为true或者1的db.collection.remove()方法。

db.collection.deleteOne()

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

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

db.collection.remove()

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

    db.users.remove( {
    status: "D" }
    , 1)
相关热词搜索: