値の分布が事前にわからないテキスト データのストリームを処理していますが、それぞれが次のようになっていることはわかっています。
{
"datetime": "1986-11-03T08:30:00-07:00",
"word": "wordA",
"value": "someValue"
}
オブジェクトの値に基づいて RethinkDB オブジェクトにバケット化しようとしています。オブジェクトは次のようになります。
{
"bucketId": "1",
"bucketValues": {
"wordA": [
{"datetime": "1986-11-03T08:30:00-07:00"},
{"datetime": "1986-11-03T08:30:00-07:00"}
],
"wordB": [
{"datetime": "1986-11-03T08:30:00-07:00"},
{"datetime": "1986-11-03T08:30:00-07:00"}
]
}
}
目的は、最終的に各バケット内の各単語の出現回数をカウントすることです。
私は約 100 万個のバケツを扱っており、事前に単語についての知識がないため、このオブジェクトをその場で作成する予定です。ただし、私は RethinkDB を初めて使用し、word
まだ存在しないバケットにキーを追加しようとしないように最善を尽くしましたが、ここでのベストプラクティスに従って、次のようにコマンドをチェーンします(次を使用してNode.jsサーバーでこれを実行していることに注意してください:
var bucketId = "someId";
var word = "someWordValue"
r.do(r.table("buckets").get(bucketId), function(result) {
return r.branch(
// If the bucket doesn't exist
result.eq(null),
// Create it
r.table("buckets").insert({
"id": bucketId,
"bucketValues" : {}
}),
// Else do nothing
"Bucket already exists"
);
})
.run()
.then(function(result) {
console.log(result);
r.table("buckets").get(bucketId)
.do(function(bucket) {
return r.branch(
// if the word already exists
bucket("bucketValues").keys().contains(word),
// Just append to it (code not implemented yet)
"Word already exists",
// Else create the word and append it
r.table("buckets").get(bucketId).update(
{"bucketValues": r.object(word, [/*Put the timestamp here*/])}
)
);
})
.run()
.then(function(result) {
console.log(result);
});
});
ここで run を 2 回実行する必要がありますか?それとも、RethinkDB を使用して物事を適切に連鎖させる方法に基づいていませんか? これにもっと深く入る前に、これを間違った/難しい方法で行っていないことを確認したいだけです。