【问题标题】:Mongo DB Remove Duplcates in a field in a Collection JavadriverMongo DB 删除集合 Java 驱动程序中字段中的重复项
【发布时间】:2015-01-23 09:07:53
【问题描述】:

我正在尝试使用 mongodb 中的 java 驱动程序删除集合中的重复项。 我正在使用代码

 table = db.getCollection("dummy_data_OLD");
    BasicDBObject query = new BasicDBObject("url", 1)
    .append("unique", true).append("dropDups", true);
    table.createIndex(query);

它将创建一个唯一索引,但在数据库中仍然存在重复。 我的代码有问题吗?

【问题讨论】:

  • 您的代码中的这个 table 是什么?是不是类似于收藏? :)
  • @Philipp 是集合名称

标签: java mongodb indexing mongodb-java


【解决方案1】:

这会在 字段 url、unique 和 dropDups 上创建一个索引。当您想使用选项创建索引时,您需要提供这些选项作为第二个 DBObject。

DBObject fields = new BasicDBObject("url", 1);
DBObject options = new BasicDBObject("unique", true).append("dropDups", true);

db.getCollection("dummy_data_OLD").createIndex(fields, options);

【讨论】:

  • url 是我的字段,但我这个选项是什么?如何在查询中提及这些内容?
  • url 是我提交的,这个选项是什么?如何在查询中提供选项?
  • @CharlotteEden Collection.createIndex 有 a two-parameter form。第一个参数是一个 DBObject,它定义了您在其上创建索引的集合中文档的字段。第二个 DBObject 定义该索引上的选项,例如 unique:true 或 dropDupes:true。您需要这两个单独的对象,因为unique 和dropDupes 是完全有效的字段名称。如果没有差异,数据库将不知道您是否尝试设置选项或在所述字段上创建索引。
  • 我只是像这样更改了我的代码 BasicDBObject query = new BasicDBObject("product_url", 1); BasicDBObject query2 = new BasicDBObject("unique", true).append("dropDups", "true"); table.ensureIndex(query,query2);
  • 我在上面试过了,但现在我得到了这个异常 com.mongodb.WriteConcernException: { "serverUsed" : "/192.168.11.107:27017" , "connectionId" : 324 , "err" : com.mongodb.CommandResult.getException(CommandResult.java:77) 处的 "too may dups on index build with dropDups=true" , "code" : 10092 , "n" : 0 , "ok" : 1.0}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 2019-02-17
  • 2017-06-14
  • 2014-10-02
相关资源
最近更新 更多