nodejs npm mysql返回单行句柄

Tyl*_*ans 6 javascript mysql node.js node-mysql

我正在使用nodenpm mysql做一些数据库工作.

有没有办法避免使用result[0],如果我知道我只会收到一行?

connection.query({
    sql: "SELECT spend FROM `account` WHERE `name` = ? order by date desc limit 1",
    values: [market.name]
    }, function (error, results, fields) {
        market.fee = results[0].age;
        resolve(market);
    });
Run Code Online (Sandbox Code Playgroud)

nal*_*inc 10

回调函数connection.query返回三个值,其中第二个是查询的结果集,因此是一个值数组.

因此,result[0]即使您确定结果集只包含一条记录,也必须使用.

此外,它有点查询自己的规范,决定应该返回什么样的数据.mysql SELECT是以这种方式工作的(虽然你可以限制记录)不像mongodb那样db.collection.findOne()查询本身知道它总会返回一条记录


Cam*_*lby 5

您还可以使用数组解构从 results 参数中解压第一行:

const sql = "SELECT age FROM `account` WHERE `name` = ? order by date desc limit 1";

connection.query({ sql, values: [market.name] }, function (error, [account], fields) {
    market.fee = account.age;
    resolve(market);
});
Run Code Online (Sandbox Code Playgroud)

或者疯狂地将一些对象解构加入到混合中:

const sql = "SELECT age FROM `account` WHERE `name` = ? order by date desc limit 1";

connection.query({ sql, values: [market.name] }, function (error, [{ age }], fields) {
    market.fee = age;
    resolve(market);
});
Run Code Online (Sandbox Code Playgroud)

另一个重构,做同样的事情,但使用简洁的主体箭头函数并扩展market到一个新对象,该对象具有fee, 映射到输入参数中[{ age: fee }]

connection.query(
  { 
    sql: "SELECT age FROM `account` where `name` = ? order by date desc limit 1", 
    values: [market.name] 
  }, 
  (error, [{ age: fee }], fields) => resolve({ ...market, fee })
);
Run Code Online (Sandbox Code Playgroud)