1

JSON形式のデータを含むファイルがあります。このデータは、一連のプロパティのさまざまなサブセットが行に含まれているという点で奇妙です。これらはすべて事前にわかっているわけではありません (時間の経過とともに蓄積されます)。例えば:

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

ファイルにはすでに大量のデータが存在するため、アイテムごとにデータを入力するのではなく、couchdb にインポートしたいと考えています。ここの投稿の手順に従いましたが、データベースが作成されている間は空でした。私が使用した:

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!');
}
});

};

後者はうまくいくようです!! データベースが作成されていっぱいになりますが、次のエラーがスローされます。

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)
4

1 に答える 1

1

[解決済み]

私の質問に対する答えは、もちろん、couchdb はその種のデータに完全に適しているということです。node.js で一括インポートを行う最も簡単な方法は、クレードル(作成者が問題の解決策を提供した) を使用することです。上記のコードは、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.');
    });

};
于 2012-08-21T02:26:52.517 に答える