从电子表格更新mongodb

时间:2013-04-23 20:18:52

标签: json mongodb

我有Google Doc电子表格

key        number
-----      ---------
abc        111
foo        222
...

我想从Google文档获取此数据,并更新MongoDB中的现有数据。

找到最好的方法(关键:'abc')并使用数字更新:111,MongoDB中的foreach行?

似乎我需要以某种方式将其导出到JSON,然后运行一些JS,它将使用新数字更新每个密钥。

由于

1 个答案:

答案 0 :(得分:0)

将Google文档中的数据导出为CSV文件。

gdocs.csv

创建描述CSV文件的文件 - CSV文件中每个字段一行。 gdocsFields.txt可能如下所示:

key
number

将数据导入临时集合中的mongo实例,例如temp

mongoimport --type csv -c temp --fieldFile gdocsFields.txt < gdocs.csv

现在更新您的实时收藏集,例如live来自mongo控制台的查询。看看这个示例,它还为您创建导入的数据以进行测试。它直接粘贴到mongo控制台:

db.temp.drop();
db.live.drop();

db.temp.insert({key:'abc', number:111});
db.temp.insert({key:'foo', number:222});
db.temp.insert({key:'xxx', number:333});
db.temp.insert({key:'yyy', number:444});
db.temp.insert({key:'zzz', number:555});

db.live.insert({key:'abc', number:100});
db.live.insert({key:'foo', number:200});
db.live.insert({key:'xxx', number:300});
db.live.insert({key:'yyy', number:400});
db.live.insert({key:'zzz', number:500});

// Update every record
var keys = db.temp.find();
keys.forEach(function(doc){
    db.live.update(
        { key:doc.key },
        { $set: {number:doc.number} },
        { upsert: true }
    );
    print(doc.key);
});

// Print out the live collection
var keys = db.live.find();
keys.forEach(function(doc){
    print(doc.key + " is now: " + doc.number);
});

不是最有效的方法,但应该很容易遵循这个过程。