我正在处理一个文本数据流,我事先不知道它的值的分布是什么,但我知道每个数据看起来像这样:
{
"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"}
]
}
}
目的是最终计算每个桶中每个单词的出现次数。
由于我正在处理大约一百万个桶,并且提前不知道单词,因此计划是动态创建这些对象。但是,我是 RethinkDB 的新手,我已尽我所能做到这一点,即我不会尝试向word
尚不存在的存储桶添加密钥,但我不完全确定我是否' m 遵循此处的最佳实践,将命令链接如下(请注意,我在 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);
});
});
我是否需要在此处执行两次运行,或者我是否基于您应该如何正确地将事物与 RethinkDB 链接在一起?我只是想确保在深入研究之前我没有以错误/艰难的方式做这件事。