跳到主要内容

数据模型-复杂查询

[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
}
}
]
}
}