0

我有一个包含 100 万份文档的集合。每个文档都有一个 ip 字段。我有一个节点函数,它可以通过将 ip 作为其参数传递给我国家代码。我将获取所有记录,运行我的节点函数,将返回的国家名称插入回文档中。并立即更新它们。但是,mongodb 有 16M 数据的限制。

{
    _id: xxxxx,
    ip: '207.97.227.239'
}

{
    _id: xxxxx,
    ip: '207.97.227.239',
    country_abbr: 'US'
}

我的问题是如何安全快速地更新这 100 万条记录。

4

2 回答 2

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}});

如果上面写的 find 查询返回任何文档,您可以阅读ip并查看需要添加哪些国家/地区。

澄清后编辑:

返回的文档太大,超出了您的 16MB 限制。所以你所做的就是只获取ip并将它们全部存储在一个链表中。然后你遍历列表并使用你拥有的神奇node函数,你得到正确的country_abbr值。最后,您以上面写的方式向 mongo 发出一个简单的更新。

为了将我的答案概括为每个人,而不是提出这个问题的人所拥有的功能,您可以进行手动输入或任何您想要的操作,并country_abbr为上面的更新命令提供值。

于 2014-06-10T22:43:50.420 回答
0

您是否尝试过使用更新方法? http://docs.mongodb.org/manual/reference/method/db.collection.update/

于 2014-06-10T22:32:38.713 回答