我在mongo中有这个:
min()
我在postgresql中做了这个:
//fill QueryString
collection.find({"myID" : {$in:QueryString} },{}).toArray(function(err, Stuff) {
...
var flag = true;
for (var i=0; i<Stuff.length; i++) {
//if statements .. alter flag
// if Stuff[i].myField....
}
if (req.body.type == "myField") {
collection.update(
{ "my_id" : req.body.id },
{$set : { "myField" : req.body.fileid }},
function(err, result) {
....
}
但是,for循环在postgres中没有像预期的那样工作。 我不确定如何在查询中使用for循环。
问题是每个循环的标志都是假的,但它应该是真的。
===============使用pg-promise ============================ =======
pg.connect(conString, function(err, client, done) {
if (err) return console.error('error fetching client from pool', err);
client.query( "SELECT * FROM mytable WHERE my_id = ANY ($1::varchar[]) ",[QueryString], function(err,Stuff) {
var flag = true;
for (var i=0; i<Stuff.rows.length; i++) {
...
//if statements .. alter flag
if (typeof(Stuff.rows[i].myField) === 'undefined' || ( (typeof(Stuff.rows[i].myField) !== 'undefined' && Stuff.rows[i].myField.length < 16 ) )) {
if (req.body.my_ids[i] === req.body.id && req.body.type === "myField") {
}else{
flag = false;
}
}
debug('flag:'+flag);
}//end of for loop
if (req.body.type === "anotherField") {
client.query("UPDATE mytable SET anotherField ='req.body.fileid' WHERE my_id = 'req.body.id'", function(err, result) {
....
});//endof update
done();
});//end of first query
通过这种方法,我仍然处于初期问题。 标志是false而不是true(关于mongo)。
最后,我不确定关于 dbPromise.tx(function (t) {
return t.any("SELECT * FROM mytable WHERE my_id = ANY ($1::varchar[]) ",[QueryString])
.then(function (Stuff) {
var flag = true;
for (var i = 0; i < Stuff.length; i++) {
...//if statements
if (typeof(Stuff[i].myField === ....)
...
} //end of for loop
var queries = Stuff.map(function (d) {
if (req.body.type === "myField") {
return t.none("UPDATE mytable SET myField ='req.body.fileid' WHERE my_id = 'req.body.id'")
debug("success: "+req.body.id);
res.send({ user : req.user, message : "SUCCESS", my_id : req.body.id});
} else if (req.body.type === "anotherField") {
....
}
});
return t.batch(queries);
})
})
.then(function (Stuff) {
//this is executed for every single update ,right?
console.log("Hurrah!");
})
.catch(function (error) {
console.log("ERROR:", error.message || error);
});
的{{1}}。我应该使用Stuff.map(function (d)
吗?如果我有很多像我这样的字段?
答案 0 :(得分:-1)
为了完成您的示例,您应该使用事务进行多次更新,以保持数据的完整性。
这是使用事务pg-promise完成整个过程的方式:
db.tx(function (t) {
return t.any("SELECT * FROM myTable WHERE my_id = ...", [params])
.then(function (data) {
var queries = data.map(function (d) {
if (/*need to update*/) {
// do any checks or manipulations for 'd';
return t.none("UPDATE myTable SET ...", [params])
}
});
return t.batch(queries);
})
})
.then(function (data) {
// all updates were successful;
console.log("Hurrah!");
})
.catch(function (error) {
// something failed;
console.log("ERROR:", error.message || error);
});