couchdb – 导入json文件

我有一个json格式的数据文件。 数据很奇怪,因为这些行具有一组属性的不同子集,这些属性并不都是事先已知的(随着时间的推移它们将会累积起来)。 例如:

[{"firstName":"Joe","education":"highschool","sex":"male"}, {"lastName":"Edwards","address":"ohio","sex":"male"}, {"favoriteSport":"cycling","bicycle":"raleigh","ownsBoat":"yes","ownsDog":"yes","ownsHouse":"yes"}] 

大量的数据已经存在于一个文件中,所以我想将它导入到couchdb中,而不是逐个input数据项。 我遵循这里的一个post的程序,但是,一个数据库创build时,它是空的。 我用了:

 curl -X PUT -d @../Data/data.json http://127.0.0.1:5984/test_import 

更新:因为我正在与nodejs(新手),我想我会尝试使用'摇篮'。 我的想法是将数据导入为数组,并使用'cradle's dbsave()'进行批量加载。 但使用以下内容:

 var fs = require('fs'); var cradle = require('cradle'); var data = fs.readFile( '../Data/data.json', function (err, data) { if (err) { throw err; } . . . makeDB(bigdata,'test_import'); // where 'bigdata' is an array of json objects/couchdb 'documents' }); function makeDB (p,filename) { var db = new(cradle.Connection)().database(filename); console.log(db); db.save(p, function(err,res) { if (err) { console.log(err); } else { console.log('Success!'); } }); }; 

后者似乎工作! 数据库被创build并被填充,但是却会抛出以下错误:

 k:\nodejs\node_modules\cradle\lib\cradle.js:198 return callback(body); ^ TypeError: undefined is not a function OR k:\nodejs\node_modules\cradle\lib\cradle.js:201 callback(null, self.options.raw ? body : new cradle.Response(body, res ^ TypeError: undefined is not a function at Request.cradle.Connection.request [as _callback] (k:\nodejs\node_modules\cradle\lib\cradle. js:201:9) at Request.init.self.callback (k:\nodejs\node_modules\request\main.js:120:22) at Request.EventEmitter.emit (events.js:91:17) at Request.<anonymous> (k:\nodejs\node_modules\request\main.js:633:16) at Request.EventEmitter.emit (events.js:88:17) at IncomingMessage.Request.start.self.req.self.httpModule.request.buffer (k:\nodejs\node_modul es\request\main.js:595:14) at IncomingMessage.EventEmitter.emit (events.js:115:20) at IncomingMessage._emitEnd (http.js:366:10) at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:149:23) at Socket.socketOnData [as ondata] (http.js:1366:20) 

[解决了]

我的问题的答案是肯定的,当然,couchdb是完全适合这种数据。 我发现用node.js进行批量导入最简单的方法是使用cradle (其创build者提供了解决问题的方法)。 前面的代码对makeDB函数进行了以下更改,因此无错误:

 // Take the array of objects and create a couchdb database function makeDB (data,filename) { var db = new(cradle.Connection)().database(filename); //console.log(db); db.create(function(err){ if (err) console.log(err); }); db.save(data, function(err) { if (err) console.log(err); console.log(filename + ' is created.'); }); };