我想用ensureIndex和dropDups删除集合中的所有重复项,但是这种方法似乎不适用于数组。 举例来说,如果我有一个集合,看起来像这样:MongoDB:删除数组中的重复文档
{ "_id" : ObjectId("54d8f889e3fdfe0cd8b769ed"), "field1" : "a", "field2" : [ "a", "b" ] }
{ "_id" : ObjectId("54d8f89be3fdfe0cd8b769ee"), "field1" : "a", "field2" : [ "a", "b" ] }
{ "_id" : ObjectId("54d8f8a3e3fdfe0cd8b769ef"), "field1" : "a", "field2" : [ "a", "c" ] }
{ "_id" : ObjectId("54d8f8abe3fdfe0cd8b769f0"), "field1" : "a", "field2" : [ "b", "a" ] }
{ "_id" : ObjectId("54d8f8c5e3fdfe0cd8b769f1"), "field1" : "b", "field2" : [ "a", "b" ] }
,并使用ensureIndex这样的:
> db.test.ensureIndex({field1: 1, field2: 1}, {unique: true, dropDups: true})
的结果将是:
> db.test.find()
{ "_id" : ObjectId("54d8f89be3fdfe0cd8b769ee"), "field1" : "a", "field2" : [ "a", "b" ] }
{ "_id" : ObjectId("54d8f8c5e3fdfe0cd8b769f1"), "field1" : "b", "field2" : [ "a", "b" ] }
是否有办法要做到这一点,只有确切的重复(在我的例子集合中只有第一个或第二个条目)被删除?
没有,因为数组索引[多键(http://docs.mongodb.org/manual/core/index-multikey/)。您可以使用聚合来识别重复的文档,或使用基于field1和field2的字段更新每个文档,然后在该字段上使用dropDups创建唯一索引。 – wdberkeley 2015-02-10 15:29:45