2015-06-24 2 views
0

Как я могу выполнять несколько обновлений с одним запросом и условием, используя javascript?Rethinkdb несколько обновлений по одному запросу и условному

Например, мои документы:

[ 
    { 
     "Author": "Auto", 
     "Number": 5, 
     "RandomText": "dddbd", 
     "Tag": "Srebro", 
     "id": "10fbd309-5a7a-4cd4-ac68-c71d7a336498" 
    }, 
    { 
     "Author": "Auto", 
     "Number": 8, 
     "RandomText": "cccac", 
     "Tag": "Srebro", 
     "id": "37f9694d-cde8-46bd-8581-e85515f8262f" 
    }, 
    { 
     "Author": "Auto", 
     "Number": 6, 
     "RandomText": "fffaf", 
     "Tag": "Srebro", 
     "id": "b7559a48-a01a-4f26-89cf-35373bdbb411" 
    } 
] 

Это мой запрос:

UpdateIndex() 
    { 
     this.r.table(this.params.table).update((row) => { 
     let result; 

     console.log(this.r.expr([row])); 

     this.r.branch(
       this.r.row(this.Index2).lt(10), 
         result = "Lucky", 
         result = "Good" 
        ); 
     /* 
     if(this.r.row("Number").lt(3)) result = "Bad"; 
     else if (this.r.row("Number").lt(5)) result = "Poor"; 
     else if (this.r.row("Number").lt(10)) result = "Lucky"; 
     else if (this.r.row("Number").lt(20)) result = "Good"; 
     else if (this.r.row("Number").lt(50)) result = "Great"; 
     else result = "Mystic"; 
     */ 

     console.log(result); 

     return this.r.object(this.Index2, result); 
     }).run(this.conn, this.CheckResult.bind(this)); 
    } 

Почему я хочу это сделать? Я создал второй индекс (this.Index2 = 'Opinion'), и теперь я хотел бы заполнить этот индекс значениями, которые описываются моим условием. Но все документы имеют одинаковые значения (пример: Плохо). Как я могу обновлять документы, но запускать условие для каждого документа и с одним запросом?

ответ

1

Назначение локальной переменной (result в вашем случае) не работает с тем, как драйвер RethinkDB создает объект запроса для отправки на сервер. Когда вы пишете код, как указано выше, вы храните личную строку в локальной переменной один раз на клиенте (а не один раз на строку на сервере), а затем отправляете этот литерал на сервер в запросе, который вы возвращаете в нижней части вашего функция. Вы также не можете использовать console.log так, как вы пытаетесь; который выполняется на клиенте, но ваш запрос выполняется на сервере. Вы можете найти http://rethinkdb.com/blog/lambda-functions/ полезный для понимания того, что клиент делает с анонимными функциями, которые вы передаете командам, например update.

Вы должны использовать do для переменной связывания вместо:

r.table(params.table).update(function(row) { 
    return r.branch(r.row(Index2).lt(10), "Lucky", "Good").do(function(res) { 
    return r.object(Index2, res); 
    }); 
}) 
+0

Спасибо, он работает сейчас. Я прочитаю этот блог о функциях lamda. – InnerWorld

Смежные вопросы