2015-06-24 77 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