【问题标题】:Remove only one document in MongoDB在 MongoDB 中只删除一个文档
【发布时间】:2020-07-29 21:32:04
【问题描述】:

当我打电话时

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

这一行将删除所有匹配的条件文档。

如果我只想删除任何或第 n 个匹配条件中的一个怎么办?

【问题讨论】:

  • 您为什么想要这样做?要删除的那个应该被删除而其他的离开了有什么特别之处?

标签: mongodb


【解决方案1】:

您需要为此执行两个单独的查询

  • 从匹配的过滤器中只取一项

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

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

【讨论】:

    【解决方案2】:

    【讨论】:

    • 感谢 arcyqwerty,mongo API 确实不一致,不知道为什么布尔标志在更新时为“多”,而删除时为“justOne”(相反)...
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 把它变成一个对象类真是太棒了!我不得不使用我以前需要 mongodb > req.dogs.remove({ "_id", mongodb.ObjectId(req.params.id)}, function(err, ....
      【解决方案5】:

      根据MongoDB db.collection.remove() reference

      只是一个

      一个可选的布尔值。要将删除限制为仅一个文档,请设置为 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});

      【讨论】:

        【解决方案6】:

        我用过这个,它对我有用

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

        这适用于 MongoDB shell 版本:3.2.17

        这里 eventList ===> 集合

        【讨论】:

        • 这与之前的答案相同。它没有提供任何不存在的东西。
        【解决方案7】:

        难道你不能先运行一个查找来获取 id,然后在你有你想要的那个时删除吗?

        【讨论】:

        • 我只想删除一个匹配条件文档,而许多文档与单个 MongoDB 命令匹配。也许它不存在?
        • 我相信这是人们所要求的,但据我所知尚未实施。
        • :\希望早日实现
        • 需要这个特性是架构的味道。不会添加根据不可预知条件(例如 b-tree walk 方向)随机删除文档的功能(我希望)。
        【解决方案8】:

        试试这个删除。

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

        【讨论】:

          【解决方案9】:

          例如,数据库的名称是“abc”,在该名称下有一个名为“用户”的集合,用户有一封电子邮件,即“test@test.com”,您要删除它: 1. 在终端上如果你输入'show dbs'(不带引号'')它会列出所有的数据库,包括'abc' 2.如果你输入'use abc',它会切换到你想要的db - abc(带有消息:“switched to db abc”) 3. 现在如果你输入'show collections',它会显示所有的收藏,包括'users' 4. 如果要列出此集合中的所有文档,只需键入:db.users.find({}) 5. 如果要删除此集合中的特定文档,请键入: db.users.remove({"email":"test@test.com"})

          如果成功,它会显示 - WriteResult({ "nRemoved" : 1 })

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-05-31
            • 2011-05-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多