我有一个名为myDatabase的数据库和一个名为test的集合。
我有一个名为Name.csv的文件,其内容如下:
大卫
罗
史密斯
梅西
Phlip
杰里米
萨希德
我喜欢做的是:
1)从Name.csv文件中读取数据
2)我的集合测试有一个名为fisrt_name的字段,它现在包含相同的值。所以我想随机更新名为first_name的字段和上面文件中的名称。
我试过的是:
use myDatabse
var file = cat('/home/milan/Desktop/Names.csv'); // read the file
var name = file.split('\n'); // create an array
for (var i = 0, l = name.length; i < l; i++){
db.test.find().forEach(function(doc){db.test.update({_id:doc._id}, {$set:{"first_name":name[i]}});});
}
注意:我没有从上面的脚本中获得任何结果或错误
我想要的结果是这样的:
{ "_id" : ObjectId("141491ee909f1a779b467cbb"), "first_name" : "David" } //first name from file
{ "_id" : ObjectId("141491ee909f1a779b467ccc"), "first_name" : "Ronaldo" } // Second name from file
{ "_id" : ObjectId("141491ee909f1a779b467cdd"), "first_name" : "Smith" } // third name from file
答案 0 :(得分:1)
我们可以通过这种方式从文件更新mongo数据库:
use myDatabase
var file = cat('/sample data/contact/Name'); // read the file
var words = file.split('\n'); // create an array of words
var totalContacts = db.test.count();
for (var i = 0, j = 0; i< totalContacts ; i++,j++){
if(j < words.length){
db.crm.test.find().skip(i).limit(1).forEach(function(doc)
{
db.crm.test.update({_id:doc._id}, {$set:{'first_name':words[j]}});});
}
else
{
j = 0;
i = i -1;
}
}
This gives exactly this result:
{ "_id" : ObjectId("141491ee909f1a779b467cbb"), "first_name" : "David" }
{ "_id" : ObjectId("141491ee909f1a779b467ccc"), "first_name" : "Ronaldo" }
{ "_id" : ObjectId("141491ee909f1a779b467cdd"), "first_name" : "Smith" }
如果ObjectId比文件中的数据多,那么它会再次从开始迭代开始。
注意:在.csv中保存文件会产生问题所以我从记事本中保存了文件,并将其命名为Name。
答案 1 :(得分:0)
不使用脚本,从mongo控制台,可以尝试这种方式
mongoimport -d -c --type csv --file --headerline
在此命令中替换&lt; ..&gt;具有所需数据的值
而不是,它将是测试
而不是/home/milan/Desktop/Names.csv
mydb - &gt;请提供数据库名称