RethinkDB - 运行一个接一个查询
RethinkDB - Run query one after another
我在使用 RethinkDB 的单个连接中 运行 设置多个查询时遇到问题。我已经尝试了 r.do 中看到的 this 问题,但是没有成功。我也尝试过使用条件更新查询。我想要做的是:
- 打开连接。
- 查询以查看我的字段是否存在,如果存在,则执行一些任务。
- 查询以查看是否存在计数字段,将其减一。
解决此问题的最佳方法是什么?看来我可能遗漏了什么?
r.connect(config.rethinkdb, function(err, conn) {
if (err) {
throw err;
}
else {
console.log('Connected.');
app.set('rethinkdb.conn', conn);
}
r.table('upcs').filter({AcceptedUPC:data}).run(conn, (err, cursor) => {
if (err) throw err;
console.log(data);
cursor.toArray((err,resu) => {
if (err) throw err;
//make a csv with some information
})
})
并且在同一个连接中 运行
r.table('upcs').filter({AcceptedUPC:data}).filter(r.row.hasFields("UPCCount")).update({UPCCount: r.row("UPCCount").sub(1)}).run(conn, (err,cursor) => {
if (err) throw err;
});
运行 这在 NodeJS 中
我假设您正在使用这个 library for node。
您可以知道它们实际上允许您执行回调或承诺。我会推荐 promises 以避免地狱的括号。
对于 promise,您可以使用 bluebird 库让生活变得轻松。
您可以通过执行以下操作来完成。
r.connect(config.rethinkdb).then(() => {
console.log("Connected");
app.set("rethinkdb.conn", conn);
return r.table('upcs').filter({AcceptedUPC:data}).run(conn);
}).then((cursor) => {
console.log(data); //maybe this should be cursor but I don't use rethinkDB
return cursor.toArray();
}).then((resu) => {
//make a csv with some information
}).catch((err) => {
throw err;
});
我在使用 RethinkDB 的单个连接中 运行 设置多个查询时遇到问题。我已经尝试了 r.do 中看到的 this 问题,但是没有成功。我也尝试过使用条件更新查询。我想要做的是:
- 打开连接。
- 查询以查看我的字段是否存在,如果存在,则执行一些任务。
- 查询以查看是否存在计数字段,将其减一。
解决此问题的最佳方法是什么?看来我可能遗漏了什么?
r.connect(config.rethinkdb, function(err, conn) {
if (err) {
throw err;
}
else {
console.log('Connected.');
app.set('rethinkdb.conn', conn);
}
r.table('upcs').filter({AcceptedUPC:data}).run(conn, (err, cursor) => {
if (err) throw err;
console.log(data);
cursor.toArray((err,resu) => {
if (err) throw err;
//make a csv with some information
})
})
并且在同一个连接中 运行
r.table('upcs').filter({AcceptedUPC:data}).filter(r.row.hasFields("UPCCount")).update({UPCCount: r.row("UPCCount").sub(1)}).run(conn, (err,cursor) => {
if (err) throw err;
});
运行 这在 NodeJS 中
我假设您正在使用这个 library for node。
您可以知道它们实际上允许您执行回调或承诺。我会推荐 promises 以避免地狱的括号。
对于 promise,您可以使用 bluebird 库让生活变得轻松。
您可以通过执行以下操作来完成。
r.connect(config.rethinkdb).then(() => {
console.log("Connected");
app.set("rethinkdb.conn", conn);
return r.table('upcs').filter({AcceptedUPC:data}).run(conn);
}).then((cursor) => {
console.log(data); //maybe this should be cursor but I don't use rethinkDB
return cursor.toArray();
}).then((resu) => {
//make a csv with some information
}).catch((err) => {
throw err;
});