Mongodb findAndModify在一个数组上

时间:2014-01-24 17:50:17

标签: mongodb

我有一个对象数组:

[{
  _id: 1,
  data: 'one'
},{
  _id: 2,
  data: 'two'
}]

我经常收到一个新阵列。有没有办法将所有数据大量推回mongo(没有重复)。

即。我知道我可以循环遍历每个元素并执行findAndModify(对于新记录,upsert为true)。但我每次都可以插入数组,因为它会碰撞。

1 个答案:

答案 0 :(得分:0)

至少在shell中,如果你尝试在一个步骤中插入整个数组,它会循环遍历数组的每个元素并运行,所以指令:

db.coll.insert([{   _id: 1,   data: 'one' },{   _id: 2,   data: 'two' }])

工作并插入两个不同的记录。 _id检查也有效,如果再次尝试,您将收到预期的错误。 无论如何,有一个缺点,这是事实上Mongo循环每一条记录的事实,如果你尝试类似的话:

db.col.insert([{   _id: 1,   data: 'one again' },{   _id: 5,   data: 'five' }])

由于Mongo在第一个记录中停止而第二个记录从未被处理,因此无法测试重复项。 还有一些其他技巧可以将这个插入到一个名为“data”的单个节点的集合中并加快处理速度,但是如果你的批量数据太大,那么你总是限制在16mb记录中,没有任何方法可以工作

如果您使用mongoimport,可以使用--jsonArray参数,但仍然限制为16 MB。

如果您需要更大的数据块,则没有其他方法可以做到这一点。