我有一个包含100万份文件的集合。每个文档都有一个ip字段。我有一个节点功能,它可以通过传递ip作为其参数来返回国家代码。我打算获取所有记录,运行我的节点功能,将返回的国家/地区名称插回到文档中。并立即更新它们。但是,mongodb对16M数据有限制。
在
{
_id: xxxxx,
ip: '207.97.227.239'
}
在
{
_id: xxxxx,
ip: '207.97.227.239',
country_abbr: 'US'
}
我的问题是如何安全快速地更新这100万条记录。
答案 0 :(得分:1)
我假设您将根据country_abbr
的值设置ip
字段。所以我认为您需要一个检查ip
的更新命令并设置country_abbr
的值。这就是你应该这样做的方式:
db.collection.update (
{ip : condition_for_ip},
{$set : {country_abbr : desired_value}},
{multi : true}
);
您需要多次运行此查询才能涵盖收藏中的所有国家/地区。
要检查您的收藏中是否还有一些文档没有country_abbr
的任何值,您可以运行以下查询:
db.collection.find({'country_abbr' : {$exists : false}});
如果以上书面查找查询返回任何文档,您可以阅读ip
并查看需要添加的国家/地区。
澄清后编辑:
返回的文档太大,在您的情况下超过了16MB的限制。所以你所做的就是你只获取ip
并将它们全部存储在一个链表中。然后,您遍历列表并使用您拥有的神奇node
函数,您将获得正确的country_abbr
值。最后,您按照上面的方式发布一个简单的更新。
为了概括我对每个人的回答,而不是提出此问题的人所具有的功能,您可以进行手动输入或任何您想要的操作,并为上面的更新命令提供country_abbr
值。
答案 1 :(得分:0)