【问题标题】:Delete partial data in mongoDB删除 mongoDB 中的部分数据
【发布时间】:2016-07-04 05:04:26
【问题描述】:

我有一个包含 372985 名称计数的 mongoDB 集合,我想删除 200000 之后的条目,以便删除后的条目总数从 372985 减少到 200000

如何通过 mongoDB 查询来做到这一点?

用例

我的 python 代码无法根据我的机器配置处理大量数据,所以我想减少 mongo 集合的大小,以便它可以在有限的 RAM 中运行。

如果这不能通过 mongo 查询完成,有人可以提示尝试 python 做同样的事情。

【问题讨论】:

  • 我们可以在文档游标循环中使用跳过和删除记录吗
  • @PraneethGudumasu:你能举个例子吗?
  • try{ MongoClient 客户端 = new MongoClient( "localhost" , 27017); MongoDatabase db = client.getDatabase("students"); MongoCollection 集合 = db.getCollection("grades"); MongoCursor cursor = collection.find().skip(10).iterator(); while(cursor.hasNext()){ 文档文档 = cursor.next(); collection.deleteOne(doc); }
  • 这是一个 mongoshell 查询还是什么?我的意思是在哪里运行这个?
  • 那个是java驱动的。我想,我们也可以从 mongo shell 执行游标

标签: python mongodb mongodb-query mongo-shell database


【解决方案1】:

您需要分步进行,因为 MongoDB 需要一个查询来匹配要删除的文档; MongoDB 在删除文档时不能使用skiplimit

  1. 查找要删除的文档(id)​​,使用skip跳转到200000之后的文档
  2. 删除属于在 1 中找到的列表的文档

您可以在 mongo shell 中尝试:

var to_delete = db.collection.find({}, {_id : 1})
        .skip(200000)
        .toArray()
        .map(function(doc) { return doc._id; });

db.collection.remove({_id: {$in: to_delete}})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多