我正在使用MongoDB 3.2,并希望避免在我的集合中出现重复项。为了做到这一点,我使用了createIndex()
方法(我尝试了不同的变体,没有一个不起作用):
dbColl.createIndex(new Document("guid", 1));
dbColl.createIndex(new BasicDBObject("guid", 1));
dbColl.createIndex(new Document("guid.content", 1));
dbColl.createIndex(new BasicDBObject("guid.content", 1));
然后,我尝试使用以下命令执行数据插入:
itemsArr.forEach(
item -> dbColl.insertOne(Document.parse(item.toString()))
);
我这样做了两次,并预计第二次MongoDB不会添加任何新行,因为数据已经添加,并且guid
字段上有索引。但情况并非如此,MongoDB添加重复项时不考虑索引值。
为什么即使guid
和/或guid.content
字段上有索引,MongoDB也会添加重复项?如何解决这个问题?我希望能够只添加一次具有相同guid
字段的文档。
以下是文档结构的示例:
在我的数据中,guid
字段是唯一的文档标识符。
2条答案
按热度按时间yqkkidmi1#
常规索引允许多个文档具有相同的值。
您需要的不是常规索引而是an unique index,它们是通过使用方法
createIndex(DBObject keys, DBObject options)
和options-object创建的,其中unique
是true
。kx7yvsdv2#
在Phillip的帮助下,我为***MongoDB 3.2***for***Java Driver 3.2.0***中的问题如何避免重复/在插入时跳过重复编写了一个完整的工作解决方案:
您可以随时使用这款即用型解决方案。