我已经查看了堆栈,找不到与我相同的问题:
我有两个集合:1)用户和2)数据。
用户:
{
_id: "1234",
name: "John"
}
和数据:
{
"userId":"1234",
"data": {
{...}
}
我现在所做的是阅读所有“数据”文档并更新每个用户的用户集合,以添加数据(并执行更多操作)。这是一个循环,对于每个数据,我在用户的Id上执行findOne(),更改返回的数组。
然后,我将新数组保存在users集合中。
我想要的是少打电话给Mongodb。我的猜测是在一个数组中添加每个新的“用户”数组,并在我的脚本的末尾,将这个用户数组发送给Mongo。但我不知道如何告诉他:“对于这个数组中的每个数组,更新集合。”
你知道怎么做吗?或者也许是获得相同结果的更好方法?
我已经看过像How to update millions of documents independently? PHP + Mongo这样的问题了,但修改只是增加和聚合,而不是像我想要添加大量数据的那样。
答案 0 :(得分:1)
假设您使用的是MongoDB 2.6+以及版本低于1.5.0的MongoDB PHP驱动程序,您可以通过Bulk Write API和MongoInsertBatch
类中的MongoUpdateBatch
PHP驱动程序。
早于2.6的MongoDB版本支持更有限的批量插入API(通过MongoCollection::batchInsert()
在PHP驱动程序中提供)。
批量/批量插入的一般策略是通过批量发送多个请求而不是单独发送来减少网络往返时间。