将对象导入mongodb集合,这些集合不是已删除_id的重复项

时间:2015-07-09 13:24:16

标签: mongodb

我有一个使用mongoexport创建的.json文件,然后从对象中删除了_id元素。我想把这个json文件然后使用mongoimport导入到另一个集合中,但我想跳过任何已经在集合中的任何重复的对象(减去_id标记,因为它不再存在于数据中)正在进口)。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

可以在目标集合的所有关键字段上创建唯一索引,然后使用常规mongoimport,它会自动忽略重复。

示例中的

:imp集合包含2个文档

>db.imp.find()
{ "_id" : ObjectId("559eb4d112bc601a37ba6c0e"), "a" : 1, "b" : 1, "c" : 1, "d" : "first" }
{ "_id" : ObjectId("559eb4e512bc601a37ba6c0f"), "a" : 2, "b" : 2, "c" : 2, "d" : "second" }

a,b和c是关键字段,在这些字段上创建唯一索引

> db.imp.ensureIndex({a:1,b:1,c:1},{unique:true})

json文件(imp.json)与现有(前两个)记录重复+另一个副本:3,b:3和c:3

{ "a" : 1, "b" : 1, "c" : 1, "d" : "one" }
{ "a" : 2, "b" : 2, "c" : 2, "d" : "two"}
{ "a" : 3, "b" : 3, "c" : 3, "d" : "third"}
{ "a" : 3, "b" : 3, "c" : 3, "d" : "three"}

mongoimport,在mongo 3.0上你可以使用--maintainInsertionOrder按照它们在输入源中出现的顺序插入文档

$ mongoimport -d imp -c imp --file imp.json

在索引

上导入结果和重复键错误
connected to: 127.0.0.1
2015-07-10T01:14:40.457+0700 insertDocument :: caused by :: 11000 E11000 duplicate key error index: imp.imp.$a_1_b_1_c_1  dup key: { : 1, : 1, : 1 }
2015-07-10T01:14:40.458+0700 insertDocument :: caused by :: 11000 E11000 duplicate key error index: imp.imp.$a_1_b_1_c_1  dup key: { : 2, : 2, : 2 }
2015-07-10T01:14:40.458+0700 insertDocument :: caused by :: 11000 E11000 duplicate key error index: imp.imp.$a_1_b_1_c_1  dup key: { : 3, : 3, : 3 }
2015-07-10T01:14:40.459+0700 imported 4 objects

最后,imp集合看起来像

> db.imp.find()
{ "_id" : ObjectId("559eb4d112bc601a37ba6c0e"), "a" : 1, "b" : 1, "c" : 1, "d" : "first" }
{ "_id" : ObjectId("559eb4e512bc601a37ba6c0f"), "a" : 2, "b" : 2, "c" : 2, "d" : "second" }
{ "_id" : ObjectId("559eba10394aeed912d00d31"), "a" : 3, "b" : 3, "c" : 3, "d" : "third" }

希望这有帮助!

答案 1 :(得分:0)

没有。你必须在Mongo shell或程序中编写某种脚本,然后手动比较这些项目。