Rethinkdb,从1个文档中获取值,然后在另一个文档中插入值+ 1

时间:2017-09-19 05:10:53

标签: javascript node.js rethinkdb

我正试图在RethinkDB中做一个试图使自动增量保证的解决方法。这就是我所拥有的:

exports.addCar = function (req, res) {
    var car= req.body;
    delete car.id;
    debug('Adding car: %j', car);

    <-Code for Adding new cars->
    r.table('cars').insert(car).run(self.connection, function(err, result) {
        if(err) {
            debug("[ERROR] addCar %s:%s\n%s", err.name, err.msg, err.message);
            res.send({error: 'An error occurred when adding the new car (' + err.msg + ')'})
        }
        else {
            if(result && result.inserted === 1) {
                car.id = result.generated_keys[0];
                res.send(car);
            }
            else {
                debug("[ERROR] Failed to create new car record: %j (%j)", car, result);
                res.send({error: 'An error occurred when adding the new car document'});
            }
        }
    });

    <-Code for AutoIncrement in another document->
    r.table("autoincrement").get(1).update({
    number: r.row("number").coerceTo("number").add(1).coerceTo("string")}).run(self.connection, function(err, result) {
        if(err) {
            debug("[ERROR] findById: %s:%s\n%s", err.name, err.msg, err.message);
        }
        else {
            console.log("New record added");
        }
    })
};

正如您所看到的,每次保存汽车时,都会为&#34;数字&#34;添加+1。用于自动增量序列的另一个文档中的行。

如何从其他文档中获取结果以将字段更新到汽车行?

1 个答案:

答案 0 :(得分:0)

首先,在您的实现中,您需要3次操作。

更好:

1)更新autoincrement表并返回更改(检查update doc):

r.table("autoincrement").get(1).update({
    number: r.row("number").coerceTo("number").add(1).coerceTo("string")}, {
            returnChanges: true
        }).run(self.connection, function(err, result) {
        if(err) {
            debug("[ERROR] findById: %s:%s\n%s", err.name, err.msg, err.message);
        }
        else {
            console.log("New record added");
        }
    })

result.changes[0].new_val.number中,您的值会增加。

2)用这个数字(或其他)更新你的car对象,并将结果插入cars表。