Sal*_*man 3 mysql point node.js
我在node.js上使用https://github.com/felixge/node-mysql模块.
Mysql表有一个类型的字段POINT.该模块需要发送数组数组以插入批量记录.但它似乎没有指定数据类型的选项.
很自然地,下面的内容用引号括起来
var loc = "GeomFromText('POINT(" + lat + "," + lon + ")')";
Run Code Online (Sandbox Code Playgroud)
有人试过吗?如何说服查询构建器将其视为sql函数?
或者我是否必须创建自己的查询构建器?
有一个来自kevinhikaruevans的拉动请求.您可以执行类似的操作将对象转换为点:
if (typeof val === 'object') {
if(val.hasOwnProperty('lat') && val.hasOwnProperty('long')) {
return 'POINT(' + [val.lat, val.long].map(parseFloat).join(',') + ')';
}
}
Run Code Online (Sandbox Code Playgroud)
假设您有一个mytable只point包含类型字段的表POINT,您可以像这样插入它们:
var points = [
[{ lat: 1, long: 4}],
[{ lat: 23, long: -8.345}]
];
var query = connection.query('INSERT INTO mytable(point) VALUES ?', [points], your_callback_func);
console.log("Query: " + query.sql);
Run Code Online (Sandbox Code Playgroud)
这将生成类似于的查询:
INSERT INTO mytable(point)
VALUES (POINT(1,4)), (POINT(23,-8.345))
Run Code Online (Sandbox Code Playgroud)
这会将具有两个lat和long字段的任何对象转换为MySQL点.如果这不是预期的行为,您可以创建一个Point类并使用它而不是普通对象,并lib/protocol/SqlString.js检查该值是否为实例Point.