各位大牛,求教mongodb如何删除重复的记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各位大牛,求教mongodb如何删除重复的记录相关的知识,希望对你有一定的参考价值。

很简单,比如数据里有三条这样重复的数据
id:1,'hello':'world'
id:2,'hello':'world'
id:3,'hello':'world'
你删除数据的条件是'hello':'world'并且id>1
这样就可以留下一条数据,并且删除了重复的数据
当然你的真实环境肯定比这复杂,自己想想怎么处理吧~
参考技术A 在MongoDB中,文档是对数据的抽象,它被使用在Client端和Server端的交互中。所有的Client端(各种语言的Driver)都会使用这种抽象,它的表现形式就是我们常说的BSON(BinaryJSON)。BSON是一个轻量级的二进制数据格式。MongoDB能够使用BSON,并将BSON作为数据的存储存放在磁盘中。当Client端要将写入文档,使用查询等等操作时,需要将文档编码为BSON格式,然后再发送给Server端。同样,Server端的返回结果也是编码为BSON格式再放回给Client端的。

MongoDB:如何在 MongoDB Shell 中删除集合的所有记录?

【中文标题】MongoDB:如何在 MongoDB Shell 中删除集合的所有记录?【英文标题】:MongoDB: How To Delete All Records Of A Collection in MongoDB Shell? 【发布时间】:2018-03-04 05:58:05 【问题描述】:

我试过了

db.users.remove(*)

虽然它返回错误,但我该如何清除所有记录?

【问题讨论】:

db.getCollection('collectionname').remove() 【参考方案1】:

使用deleteMany函数(docs):

假设您的收藏名为users

db.users.deleteMany()

deleteManyfilter 作为参数,并将 empty document 作为过滤器传递,相当于要求删除集合的所有成员。

请注意,remove 应该仍然有效,但您需要传递相同的空文档:

db.users.remove()

但是,remove 已被弃用,如果您的 mongo 安装是最新的,使用 remove 应该会导致弃用警告,指示您应该改用首选方法之一。从 1.0.7 开始:

DeprecationWarning:Collection.remove() 已弃用。使用 deleteOne, deleteMany、findOneAndDelete 或 bulkWrite。

【讨论】:

【参考方案2】:

请尝试使用以下代码从所有集合中删除所有文档,除了从“系统”开始。

use('DatabaseName');
db.getCollectionNames()
  .filter((collectionName) => collectionName.indexOf("system.") === -1)
  .forEach((collectionName) => 
    print(`Removing: $db[collectionName].count() documents from $collectionName`);
    db[collectionName].deleteMany();
  );

此代码也可以在 MongoDB 游乐场中运行。 它还将打印每个集合删除的文档数。

【讨论】:

【参考方案3】:

这是删除 MongoDB shellMongoDB Compass shell (_MongoSH) 中集合的所有记录的命令。。 p>

show dbs                                    -> to list all the database
use test-database                           -> to select the database
db.getCollection('orders').deleteMany()   -> to select the collection and deletes all the data.

或者

show dbs                     -> to list all the database
use test-database            -> to select the database
db.orders.remove()      -> to select the collection and deletes all the data.

【讨论】:

【参考方案4】:

从 cmd 中的集合中删除所有文档:

cd C:\Program Files\MongoDB\Server\4.2\bin
mongo
use yourdb
db.yourcollection.remove(   )

这个例子是为 MongoDB 4.2 制作的

【讨论】:

【参考方案5】:

要删除所有集合中的所有文档:

db.getCollectionNames().forEach( function(collection_name)  
    if (collection_name.indexOf("system.") == -1) 
        print ( ["Removing: ", db[collection_name].count(), " documents from ", collection_name].join('') );
        db[collection_name].remove(); 
    
);

【讨论】:

【参考方案6】:
db.users.count()
db.users.remove()
db.users.count()

【讨论】:

【参考方案7】:

您可以从 MongoDB 中的一个集合中删除所有文档,您可以使用以下方法:

db.users.remove()

或者,您也可以使用以下方法:

db.users.deleteMany()

关注以下 MongoDB documentation,了解更多详情。

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

【讨论】:

【参考方案8】:

remove() 的参数是一个过滤文档,因此传入一个空文档意味着“全部删除”:

db.user.remove()

但是,如果您确实要删除所有内容,可能最好还是删除该集合。虽然这可能取决于您是否在集合上有用户定义的索引,即在删除集合后准备集合的成本是否超过 remove() 调用与 drop() 调用的较长持续时间。

更多详情in the docs.

【讨论】:

remove 现在已弃用。改用db.user.deleteMany() @MahdiehShavandi 查看 Mongo shell 文档我看不到任何说 remove 已弃用 (docs.mongodb.com/manual/reference/method/db.collection.remove)。您能否提供链接或引用来支持该声明? 对不起,我最好说:它会在未来的版本中被弃用。它只是在终端中记录此声明。 弃用警告:Collection.remove() 已弃用。使用 deleteOne、deleteMany、findOneAndDelete 或 bulkWrite。

以上是关于各位大牛,求教mongodb如何删除重复的记录的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB:从 Projection 中删除重复记录

elk问题,求教各位大虾!

求教mongoDB怎么实现分组去重

如何在excel中将两列对应的数据以其中一列的排序 求教各位高手

京东笔试题:如何实现 MySQL 删除重复记录并且只保留一条?

使用C语言如何取去掉一个字符串的首尾字符,新手求教各位大神,多谢啦。