在MongoDB中删除一个文档

6
当我调用时
db.collection.remove({'condition':'some condition'});

这一行代码将删除所有符合条件的文档。

如果我只想删除任意一个或第n个匹配条件,该怎么办?


你为什么要这样做?有什么特别之处需要删除该内容,但其他内容保留呢? - Ian Mercer
9个回答

18
你需要执行两个单独的查询。
  • 从匹配的筛选条件中只取一个项目

var item = db.collection.findOne({'condition':'some condition'})
  • 通过使用id删除该项

  •  db.collection.remove({_id: item._id});
    

    11

    谢谢 arcyqwerty,Mongo API 真的很不一致,不确定为什么在更新时布尔标志是 'multi',而在删除时却是相反的 'justOne'。 - Peter Johnson

    2

    如果有多条记录,您只想删除第一条记录,则在remove()方法中设置justOne参数。

    在这里,您只想删除1条。因此,将“justOne”参数设置为1。

    db.collection.remove({'condition':'some condition'},1);


    2

    使用以下命令从集合中删除一个文档:

    db.collectionname.remove({"_id": ObjectId("5473293d43ecdre56352457f3a")})


    将其更改为对象类是关键!我必须使用我用于要求mongodb的var > req.dogs.remove({"_id",mongodb.ObjectId(req.params.id)},function(err,.... - Tom22

    1
    根据MongoDB db.collection.remove() reference

    justOne

    一个可选的布尔值。若要将删除限制为仅一个文档,请设置为true。如果省略,则使用默认值false并删除与删除条件匹配的所有文档。

    您可以将justOne设置为true,以执行此操作。

    MongoDB 2.6版本之前:

    db.collection.remove(
       <query>,
       <justOne>
    )
    

    MongoDB版本2.6或更高版本

    db.collection.remove(
       <query>,
       {
         justOne: <boolean>,
         writeConcern: <document>
       }
    )
    

    像这样:db.collection.remove({"condition": "some condition"}, {justOne: true});


    1

    我使用过这个,它对我有效

    db.eventList.remove({"_id":ObjectId("5d9f3bd0c02cef7d50bb97fb")});
    

    这是在MongoDB shell版本3.2.17上工作。
    这里的eventList指的是集合(collection)。

    这与早期的答案完全相同,没有提供任何新的内容。 - Dragonthoughts

    0
    例如,数据库的名称为“abc”,其中有一个名为“users”的集合,用户具有电子邮件地址“test@test.com”,您想要删除它: 1. 在终端上,如果您键入“show dbs”(不带引号),它将列出所有数据库,包括“abc” 2. 如果您键入“use abc”,它将切换到您所需的数据库 - abc(并显示消息:“已切换到数据库abc”) 3. 现在,如果您键入“show collections”,它将显示所有集合,包括“users” 4. 如果您想要列出此集合中的所有文档,只需键入:db.users.find({}) 5. 如果您想要删除此集合中的特定文档,请键入: db.users.remove({"email":“test@test.com”})
    如果成功,它将显示- WriteResult({“nRemoved”:1})

    0

    你不能只运行一个查找操作来获取ID,然后在你想要的位置运行删除操作吗?


    我想用单个MongoDB命令删除多个文档中的一个匹配条件文档。也许这是不可能的? - jwchang
    我相信这是人们正在询问的内容,但据我所知它还没有被实现。 - methodin
    希望它能尽快实现。 - jwchang
    2
    需要这个功能是一种模式的异味。像根据不可预测的条件(如B树遍历方向)随机删除文档的功能不会被添加(我希望)。 - Remon van Vliet

    0

    请尝试这个进行删除操作。

    db.users.deleteOne({"_id": ObjectId("5473293d43ecdre56352457f3a")});
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接