数据模型-复杂查询
[TOC]
如何使用复杂查询
查询参数说明
逻辑运算符
名称 | 描述 |
---|---|
$and | 使用逻辑 and 连接字段,返回与这两个字段条件匹配的数据 |
$or | 使用逻辑 or 连接字段,返回与任一个字段条件匹配的数据 |
示例 1
{
"$and": [
{
"key": {
"$eq": "val"
}
}
]
}
示例 2
{
"$or": [
{
"$and": [
{
"key": {
"$eq": "val"
}
},
{
"key2": {
"$neq": 3
}
}
]
},
{
"key3": {
"$eq": 0
}
}
]
}
比较运算符
名称 | 描述 | 适用类型 |
---|---|---|
$eq | 匹配等于指定值的值 | 字符串,布尔值,数字 |
$neq | 匹配所有不等于指定值的值 | 字符串,布尔值,数字 |
$gt | 匹配大于指定值的值 | 数字 |
$gte | 匹配大于或等于指定值的值 | 数字 |
$lt | 匹配小于指定值的值 | 数字 |
$lte | 匹配小于或等于指定值的值 | 数字 |
$in | 匹配数组中指定的任何值 | 数组 |
$nin | 不匹配数组中指定的任何值 | 数组 |
示例 1
{
"$and": [
{
"key": {
"$eq": "val"
}
}
]
}
示例 2
{
"$and": [
{
"key1": {
"$in": ["foo", "bar"]
}
},
{
"key2": {
"$in": [1, 2]
}
}
]
}
特殊运算符
名称 | 描述 | 适用类型 | 说明 |
---|---|---|---|
$search | 模糊查询 | 字符串 | 性能较差,尽量避免使用 |
$nsearch | 不包含,会把 null 值查找出来 | 字符串 | 性能较差,尽量避免使用 |
$eq-current-user | 等于当前用户 | 字符串 | |
$ne-current-user | 不等于当前用户 | 字符串 | |
$empty | 数据为 null | 任意类型 | |
$nempty | 数据不为 null | 任意类型 |
$empty
,$nempty
在 mongo 中,会查询字段不存在和字段值为 null 的两种情况。
示例1.1
{
"$and": [
{
"key": {
"$search": "val"
}
}
]
}
示例1.2
{
"$and": [
{
"key": {
"$nsearch": "val"
}
}
]
}
示例2.1
{
"$and": [
{
"key": {
"$eq-current-user": "val"
}
}
]
}
示例2.2
{
"$and": [
{
"key": {
"$ne-current-user": "val"
}
}
]
}
示例3.1
{
"$and": [
{
"key": {
"$empty": 1
}
}
]
}
示例3.2
{
"$and": [
{
"key": {
"$nempty": 1
}
}
]
}
如何查询null值
{
"where": {
"key": {
"$eq": null
}
}
}
Mysql无法支持包含null
对于Mysql来说,不能支持如下查询
{
"where": {
"key": {
"$in": [null]
}
}
}
可以替换为
{
"where": {
"key": {
"$eq": null
}
}
}
Mysql无法支持包含null和其他值
如下查询不支持
{
"where": {
"key": {
"$in": [1, 2, null]
}
}
}
可以替换为
{
"where": {
"$or": [
{
"key": {
"$in": [1, 2]
}
},
{
"key": {
"$eq": null
}
}
]
}
}