我期待做一個get,在結果上運行一個函數,它將通過更新一個字段來進行一些操作,然後將該文檔回到數據庫中。真的,我的問題是能夠鏈接多個數據庫調用。過去一週左右我一直在努力。任何建議表示讚賞,謝謝。從rethinkdb數據庫獲取數據,處理所述數據,然後用操縱的文檔更新數據庫
這是我迄今爲止嘗試過,但是我收到一個錯誤:
function geocode_cleanup(request, response, next) {
r.table('dealer_locations').filter(r.row('geodata').match('No geodata found.'))
.do(function(row) {
var geodata = opencage_geocoder.geocode(row.Address, function(error, response) {
if (error) {
console.log("Error.");
row.geodata = "No geodata found.";
row.active = true;
} else if (response.length == 0) {
console.log("Empty response.");
} else {
console.log("Success.");
console.log(response);
var latitude = response[0].latitude;
var longitude = response[0].longitude;
row.geodata = r.point(longitude, latitude);
row.active = true;
}
});
return r.table('dealer_locations').update({
geodata: geodata
})
}).run(conn, function(error, cursor) {
response.setHeader("Content-Type", "application/json");
if (error) {
handleError(response, error);
} else {
cursor.toArray(function(error, results) {
if (error) {
handleError(response, error);
} else {
response.send(results);
};
});
}
next();
})
};
而且,這給在響應中返回了預期的效果,但第二個分貝行動從未發生過,因爲我還在裏面我認爲相同的db連接:
function geocode_cleanup(request, response, next) {
var conn = request._rdbConn;
r.table('dealer_locations').filter({geodata: "No geodata found."}).run(conn, function(error, cursor) {
if (error) {
handleError(response, error);
} else {
cursor.toArray(function(error, results) {
if (error) {
handleError(response, error);
} else {
var i = 1;
async.forEach(results, function(item, callback) {
var address = (item.Address + " " + item.City).toString();
opencage_geocoder.geocode(address, function(err, res) {
if (err) {
console.log(i);
console.log("Error.");
item.id = i;
item.geodata = "No geodata found.";
item.active = true;
i++;
callback();
} else if (res.length == 0) {
console.log(i);
console.log("Empty response.");
i++;
callback();
} else {
console.log(i);
console.log("Success.");
console.log(res);
var latitude = res[0].latitude;
console.log(i + " " + latitude);
var longitude = res[0].longitude;
console.log(i + " " + longitude);
item.id = i;
item.geodata = r.point(longitude, latitude);
item.active = true;
i++;
callback();
}
});
}, function() {
r.table('dealer_locations').insert(results, {
conflict: "replace"
}).run(request._rdbConn, function(error, results) {
if (error) {
console.log("Data not inserted!");
} else {
console.log("Data inserted!");
}
});
console.log("Done!");
response.send(results);
});
}
})
}
})
}
哪一個是從未發生過的第二個分貝行動? –
插入。 。 'r.table( 'dealer_locations')INSERT(結果,{ 衝突: 「代替」 })運行(request._rdbConn,功能(錯誤,結果){ 如果(錯誤){ 的console.log。 (「Data not inserted!」); } else { console.log(「Data inserted!」); } });' –
您在第一個錯誤中遇到什麼錯誤?請記住,例如,您不能在ReQL的匿名函數中(例如'do')運行JavaScript函數。這些函數是在服務器上發送和執行的(例如,它不能訪問'opencage_geocoder') –