mongdb 高级查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38361347/article/details/85007366

mongdb 高级查询

条件查询

  • (>) 大于 - $gt
  • (<) 小于 - $lt
  • (>=) 大于等于 - $gte
  • (<= ) 小于等于 - $lte

大于4

db.user.find({"age":{$gt:4}})

大于等于4

db.user.find({"age":{$gte:4}})

小于

db.user.find({"age":{$lt:4}})

小于等于

db.user.find({"age":{$lte:5}})

多个条件查询

4<age<10

db.user.find({"age":{$gt:4,$lt:10}})

查询不等3的数据

db.user.find({"age":{$ne:3}});

in 包含

查找在某个范围内的 查询结果符合 其中的某一个值即可

db.user.find({"age":{$in:[1,2,3]}});

nin 不包含

db.user.find({"age":{$nin:[1,2,3]}})

all

必须满足[ ] 内每一个值

db.user.find({"age":{$all:[1,2,3]}});

模糊查询

基础语法:{“key”:正则标记}; 例如:db.user.find ( { “name”:/s/i } )

i 忽略大小写

db.user.find({“name”:/s/i})

{ "_id" : NumberLong(1), "name" : "zs", "grade" : "111", "age" : 1, "_class" : "com.example.mongdbtest.demo.pojo.User" }
{ "_id" : NumberLong(2), "name" : "LS", "grade" : "22", "age" : 2, "_class" : "com.example.mongdbtest.demo.pojo.User" }
{ "_id" : NumberLong(4), "name" : "lsit2", "_class" : "com.example.mongdbtest.demo.po
不忽略大小写:

db.user.find({“name”:/s/})

{ "_id" : NumberLong(1), "name" : "zs", "grade" : "111", "age" : 1, "_class" : "com.example.mongdbtest.demo.pojo.User" }
{ "_id" : NumberLong(4), "name" : "lsit2", "_class" : "com.example.mongdbtest.demo.pojo.User" }
{ "_id" : NumberLong(3), "name" : "lsit1", "age" : 12, "_class" : "com.example.mongdb
完整语法:

{ key : {"$regex" : 正则标记, “options” : 选项 } }

db.user.find({“name”:{“ r e g e x &quot; : &quot; 7 &quot; , &quot; regex&quot;:&quot;7&quot;,&quot; options”:"$i"}})

{ "_id" : NumberLong(11), "name" : "lsit47", "age" : 11, "_class" : "com.example.mongdbtest.demo.pojo.User" }
{ "_id" : NumberLong(21), "name" : "lsit417", "age" : 21, "_class" : "com.example.mongdbtest.demo.pojo.User" }

或者

db.user.find({“name”:{“ r e g e x &quot; : / 7 / , &quot; regex&quot;:/7/,&quot; options”:"$i"}})

{ "_id" : NumberLong(11), "name" : "lsit47", "age" : 11, "_class" : "com.example.mongdbtest.demo.pojo.User" }
{ "_id" : NumberLong(21), "name" : "lsit417", "age" : 21, "_class" : "com.example.mongdbtest.demo.pojo.User" }
相应的正则标记不加引号

|- 对于options主要是设置正则的信息查询的标记
​ |- “i” 忽略字母大小写
​ |- “m” 多行查找
​ |- “x” 空白字符除了被转义的或在字符类中以外的完全被忽略
​ |- “s” 匹配所有的字符,包括换行内容
|- 对于 i 和 m 可以直接使用,但是 x 和 s 必须使用 “$regex”


排序:

db.user.find({“name”:{“ r e g e x &quot; : / s / , &quot; regex&quot;:/s/,&quot; options”:"/i"}}).sort({“age”:-1})

执行完查询后结果集进行排序。
  • -1 表示倒叙
  • 1 表示正序

查询 title 包含"教"字的文档:

db.col.find({title:/教/})

查询 title 字段以"教"字开头的文档:

db.col.find({title:/^教/})

查询 titl e字段以"教"字结尾的文档:

db.col.find({title:/教$/})

【distinct】

相当于sql中的 distinct 也表示去除重复

返回一个数组,包含所有的键

去重 返回的不重复的所有数据
 db.user.distinct("name");
// 1
[
    "zs",
    "ls",
    "教1s",
    "教2sS",
    "张教S",
    "Abc张教d",
    "王五1",
    "LS",
    "zs2",
    "王五4",
    "王五5",
    "王五6",
    "王五8",
    "王五9",
    "tizzY",
    "tizzy",
    "tiZZy",
    "王五13",
    "王五14",
    "王五15",
    "ls3",
    "new",
    "ls2"
]

where查询

查询所有

db.user.find();

查询 age > 5

db.user.find({$where:"this.age > 5"})

count函数

查询记录条数

db.user.find().count()

或者

db.user.count()

count() 查询

db.user.count({"age":3})

count() 里面 带参数查询和不带参数查询效率差别很大

db.user.find().skip(0).limit(10);

返回总数
实际上返回的是所有的数据总数:
db.user.find().skip(10).limit(2).count()
应该这么写返回查询后的数
db.user.find().skip(10).limit(2).count(true)

exists

查询出 age为 null的数据

db.user.find({"age":null});  

结果:前两个文档没有age字段但是也查询出来了,第三个是符合我们查询的结果。

// 1
{
    "_id": NumberLong("4"),
    "name": "lsit2",
    "_class": "com.example.mongdbtest.demo.pojo.User",
    "grade": 3
}

// 2
{
    "_id": 25,
    "name": "ls4",
    "id": 25
}

// 3
{
    "_id": ObjectId("5c1371e4a9aa1125b8003a85"),
    "name": "new",
    "age": null,
    "id": "24"
}

这时候应该用存在 exists 字段 过滤一下,确认age字段是否存在!

查询出age 字段为 null的值数据
db.user.find({"age":{$exists:true,$in:[null]}}); 

age字段存在的结果

// 1
{
    "_id": ObjectId("5c1371e4a9aa1125b8003a85"),
    "name": "new",
    "age": null,
    "id": "24"
}


查询出字段不存在 ,切值为 null的 数据

db.user.find({"age":{$exists:false,$in:[null]}});

age字段不存在的结果

// 1
{
    "_id": NumberLong("4"),
    "name": "lsit2",
    "_class": "com.example.mongdbtest.demo.pojo.User",
    "grade": 3
}

// 2
{
    "_id": 25,
    "name": "ls4",
    "id": 25
}

分页查询

skip 跳过多少数量 limit 返回多少数量

db.user.find({"age":{$gt:4}}).skip(0).limit(2);   //相当于显示第一页 每页2条数据
db.user.find({"age":{$gt:4}}).skip(2).limit(2);   //相当于显示第二页 每页2条数据

sort 排序

1 表示升序 -1 表示降序

db.user.find({"age":{$gt:4}}).sort({"name":1}); 

猜你喜欢

转载自blog.csdn.net/weixin_38361347/article/details/85007366