我正在使用 mongo import 来导入一堆 json,我正在寻找一种只导入不存在的记录的方法(可以通过 oid 检查)。我尝试使用 --upsert 但它会更新记录,如果它已经存在,我想完全忽略它。
有任何想法吗...?
我正在使用 mongo import 来导入一堆 json,我正在寻找一种只导入不存在的记录的方法(可以通过 oid 检查)。我尝试使用 --upsert 但它会更新记录,如果它已经存在,我想完全忽略它。
有任何想法吗...?
mongoimport 的默认行为不应该是覆盖现有文档:在 JS shell 中,我在集合“testimport”中创建了一个文档
> db.testimport.save({_id:1, x:"a"})
> db.testimport.find()
{ "_id" : 1, "x" : "a" }
>
以下是文件 import.json 的内容。它包含 2 个文档,一个具有唯一 _id,另一个具有重复 _id。
import.json
{_id:1, x:"b"}
{_id:2, x:"b"}
在新的终端窗口中,运行 mongoimport:
$ ./mongoimport -d test -c testimport import.json -vvvvv
Wed Apr 4 19:03:48 creating new connection to:127.0.0.1
Wed Apr 4 19:03:48 BackgroundJob starting: ConnectBG
Wed Apr 4 19:03:48 connected connection!
connected to: 127.0.0.1
Wed Apr 4 19:03:48 ns: test.testimport
Wed Apr 4 19:03:48 filesize: 29
Wed Apr 4 19:03:48 got line:{_id:1, x:"b"}
Wed Apr 4 19:03:48 got line:{_id:2, x:"b"}
imported 2 objects
$
尽管 mongoimport 的输出表明导入了两个对象,但 _id:1 的文档并未被覆盖。
> db.testimport.find()
{ "_id" : 1, "x" : "a" }
{ "_id" : 2, "x" : "b" }
>
如果使用了 --upsert 标志,那么带有 _id:1 的文档将被更新:
$ ./mongoimport -d test -c testimport import.json -vvvvv --upsert
Wed Apr 4 19:14:26 creating new connection to:127.0.0.1
Wed Apr 4 19:14:26 BackgroundJob starting: ConnectBG
Wed Apr 4 19:14:26 connected connection!
connected to: 127.0.0.1
Wed Apr 4 19:14:26 ns: test.testimport
Wed Apr 4 19:14:26 filesize: 29
Wed Apr 4 19:14:26 got line:{_id:1, x:"b"}
Wed Apr 4 19:14:26 got line:{_id:2, x:"b"}
imported 2 objects
$
在 JS shell 中,我们可以看到 _id:1 的文档已经更新:
> db.testimport.find()
{ "_id" : 1, "x" : "b" }
{ "_id" : 2, "x" : "b" }
>
这不是您正在经历的行为吗?以上是用2.1.1-pre版本测试的,但是我不相信mongoimport代码已经改变了一段时间。