即使将multi设置为true,MongoDB也不会更新所有记录

时间:2014-06-02 21:17:48

标签: mongodb

我有一个代表维基百科页面的集合,包括标题,类别和链接,如下所示。

{
    "_id" : NumberLong(1975),
    "Categories" : [ 
        "pacific ocean"
    ],
    "Links" : [ 
        "volcano", 
        "trench", 
        "water", 
        ...
        "kilometer", 
        "plate tectonics", 
        "el niño"
    ],
    "Title" : "pacific ocean"
}

我需要更新Links数组中的一些值,为此,我正在执行以下操作。

db.WikipediaArticles.update({Links:"kilometer"}, {$set: {"Links.$": "kilometre"}}, {upsert:false, multi:true})

然而,这并没有更新所有文件(如预期的那样),我最终必须运行3-4次才能更新所有记录。无论如何我可以保证所有文件都更新了吗?

1 个答案:

答案 0 :(得分:3)

$标识查询中第一个匹配元素的索引,因此每次运行update时,它最多只会修改一个Links每个文档的元素。

由于Links可以包含"kilometer"的多个元素,因此您需要继续运行update命令,直到它报告没有文档受到影响。