MongoDB:使用MongoImport和csv仅更新单个字段

时间:2016-11-20 07:38:21

标签: mongodb

我正在尝试使用包含-upsert的csv和Mongoimport来更新集合中每个文档中的单个字段。 但是,该过程会删除文档中的所有其他字段。

我有一个包含以下文档的图书集:

{

    "_id" : "knOIv8ZUUK", 
    "Price" : 2.2, 
    "Title" : "Rats Ahoy"
}

{

    "_id" : "okYEGuWznv", 
    "Price" : 3.3, 
    "Title" : "Friendly Fish"
}

csv文件:

_id,Price

knOIv8ZUUK,2.2

okYEGuWznv,3.3

使用以下方式导入:

mongoimport  --db local  --collection Books --upsert  --type csv  
             --headerline  --file c:\import\newPrice

删除标题字段

的结果
{ 

    "_id" : "knOIv8ZUUK", 
    "Price" : 2.2
}

{ 

    "_id" : "okYEGuWznv", 
    "Price" : 3.3
}

我错误地认为Upsert会更新导入的字段。 那么我可以使用另一个进程来更新大量文档中的1个字段吗? 感谢

2 个答案:

答案 0 :(得分:1)

自版本3.4 Documentation here.

以来添加了新功能

选中此选项

--mode insert|upsert|merge

在你的情况下你可以使用这个:

--mode merge

答案 1 :(得分:1)

来自mongoimport --upsertFields doc 您可能需要使用模式合并:

  

将与导入文件中的文档匹配的现有文档与新文档合并。 mongoimport将插入所有其他文件。导入期间合并匹配文档描述了如何使用--mode merge。

并指定字段名称,默认为'_id'

--mode merge --upsertFields <fieldname>

所以就你的情况而言

--mode merge --upsertFields