首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >couchdb -导入json文件

couchdb -导入json文件
EN

Stack Overflow用户
提问于 2012-08-19 20:35:59
回答 1查看 2.5K关注 0票数 1

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

代码语言:javascript
复制
[{"firstName":"Joe","education":"highschool","sex":"male"},
 {"lastName":"Edwards","address":"ohio","sex":"male"},
{"favoriteSport":"cycling","bicycle":"raleigh","ownsBoat":"yes","ownsDog":"yes","ownsHouse":"yes"}]

文件中已经存在大量数据,因此我希望将其导入到couchdb中,而不是逐项输入数据。我按照post here中的步骤操作,但是,虽然创建了一个db,但它是空的。我使用:

代码语言:javascript
复制
curl -X PUT -d @../Data/data.json http://127.0.0.1:5984/test_import

更新:由于我使用的是nodejs (新手),我想我应该尝试使用“摇篮”。我的想法是将导入数据作为一个数组,并使用‘cradle的dbsave()进行批量加载。但使用以下方法:

代码语言:javascript
复制
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!');
}
});

};

后者似乎起作用了!!创建并填充了一个数据库,但是它抛出了以下错误:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-21 10:26:53

已解决

我的问题的答案是肯定的,当然,couchdb非常适合这种数据。我发现使用node.js进行批量导入的最简单方法是使用cradle (它的创建者提供了问题的解决方案)。对makeDB函数进行以下更改后,上述代码可以正常工作:

代码语言:javascript
复制
//  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.');
    });

};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12026521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档