RethinkDB - 运行一个接一个查询

RethinkDB - Run query one after another

我在使用 RethinkDB 的单个连接中 运行 设置多个查询时遇到问题。我已经尝试了 r.do 中看到的 this 问题,但是没有成功。我也尝试过使用条件更新查询。我想要做的是:

  1. 打开连接。
  2. 查询以查看我的字段是否存在,如果存在,则执行一些任务。
  3. 查询以查看是否存在计数字段,将其减一。

解决此问题的最佳方法是什么?看来我可能遗漏了什么?

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