我有一个对象数组:
[{
_id: 1,
data: 'one'
},{
_id: 2,
data: 'two'
}]
我经常收到一个新阵列。有没有办法将所有数据大量推回mongo(没有重复)。
即。我知道我可以循环遍历每个元素并执行findAndModify(对于新记录,upsert为true)。但我每次都可以插入数组,因为它会碰撞。
答案 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。
如果您需要更大的数据块,则没有其他方法可以做到这一点。