如何查询 Mysql X DevAPI 中的空字段或缺失字段?
How to query for Null or Missing Fields in Mysql X DevAPI?
如何在 Mysql X DevAPI 中查询空字段或缺失字段?
我尝试了 .find("age IS NULL")
和 .find("age = null")
,但都不起作用。
> db.createCollection('users')
> db.getCollection('users').add({ name: "foo", age: 30 })
> db.getCollection('users').add({ name: "bar", age: null })
> db.getCollection('users').find("age IS NULL")
Empty set (0.0003 sec)
> db.getCollection('users').find("age = null")
Empty set (0.0004 sec)
我可以使用 MySQL Shell(我猜你正在使用的是什么)和 Connector/Node.js 重现它。我知道 Connector/Node.js 将正确的数据类型发送到服务器(使用 Shell 您可以使用 --trace-proto
选项检查)。
Mysqlx.Crud.Find {
collection {
name: "<some_schema>"
schema: "users"
}
data_model: DOCUMENT
criteria {
type: OPERATOR
operator {
name: "is"
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
param {
type: LITERAL
literal {
type: V_NULL
}
}
}
}
}
这意味着服务器出现了一些问题。
在这种情况下,X DevAPI 表达式似乎没有生成正确的 SQL 查询。如果您查看常规日志,您应该会看到类似
的内容
SELECT doc FROM `<some_schema>`.`users` WHERE (JSON_EXTRACT(doc,'$.age') IS NULL)
问题是 JSON_EXTRACT
是 returning null
(JSON 类型)而不是 NULL
(SQL“类型” ), 这是 X 插件的限制。
插件修复此问题的一种方法是将 JSON_EXTRACT()
替换为 JSON_VALUE()
,在这种情况下,这将 return 正确的 NULL
值,但是我不知道那意味着什么。
作为解决方法,您始终可以使用
session.sql("select doc from `<some_schema>`.`users` where json_value(doc, '$.age') is null").execute()
同时,我鼓励您使用 MySQL Server: Document Store: X Plugin
或 MySQL Server: Document Store: MySQL Shell
类别在 https://bugs.mysql.com/ 报告错误。
免责声明:我是 MySQL X DevAPI Connector for Node.js
的首席开发人员
如何在 Mysql X DevAPI 中查询空字段或缺失字段?
我尝试了 .find("age IS NULL")
和 .find("age = null")
,但都不起作用。
> db.createCollection('users')
> db.getCollection('users').add({ name: "foo", age: 30 })
> db.getCollection('users').add({ name: "bar", age: null })
> db.getCollection('users').find("age IS NULL")
Empty set (0.0003 sec)
> db.getCollection('users').find("age = null")
Empty set (0.0004 sec)
我可以使用 MySQL Shell(我猜你正在使用的是什么)和 Connector/Node.js 重现它。我知道 Connector/Node.js 将正确的数据类型发送到服务器(使用 Shell 您可以使用 --trace-proto
选项检查)。
Mysqlx.Crud.Find {
collection {
name: "<some_schema>"
schema: "users"
}
data_model: DOCUMENT
criteria {
type: OPERATOR
operator {
name: "is"
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
param {
type: LITERAL
literal {
type: V_NULL
}
}
}
}
}
这意味着服务器出现了一些问题。
在这种情况下,X DevAPI 表达式似乎没有生成正确的 SQL 查询。如果您查看常规日志,您应该会看到类似
的内容SELECT doc FROM `<some_schema>`.`users` WHERE (JSON_EXTRACT(doc,'$.age') IS NULL)
问题是 JSON_EXTRACT
是 returning null
(JSON 类型)而不是 NULL
(SQL“类型” ), 这是 X 插件的限制。
插件修复此问题的一种方法是将 JSON_EXTRACT()
替换为 JSON_VALUE()
,在这种情况下,这将 return 正确的 NULL
值,但是我不知道那意味着什么。
作为解决方法,您始终可以使用
session.sql("select doc from `<some_schema>`.`users` where json_value(doc, '$.age') is null").execute()
同时,我鼓励您使用 MySQL Server: Document Store: X Plugin
或 MySQL Server: Document Store: MySQL Shell
类别在 https://bugs.mysql.com/ 报告错误。
免责声明:我是 MySQL X DevAPI Connector for Node.js
的首席开发人员