从文件更新Mongo字段

时间:2017-06-09 09:52:56

标签: mongodb mongodb-query

我有一个名为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

2 个答案:

答案 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;请提供数据库名称