MongoDB总结整理2 --- mongodb文档查询1【mongodb查询语法介绍】

1 mongodb查询数据的基本语法

1.1 从可视化工具说起

以下面这款mongodb可视化工具为例,我们可以看到mongo的查询语句由五部分组成分别为

  • Query: 非必填,查询条件,较复杂会单独讲;
  • Projection: 非必填, 如不填,则返回文档中的所有字段,0表示字段排除,非0表示字段选择并排除其他字段,除了_id之外,所有字段必须设置同样的值(看下文中的例子就明白了);
  • Sort:非必填,排序,1:升序(相当于mysql里的ASC) -1:降序(相当于mysql里的DESC);
  • Skip和Limit:非必填,与mysql里limit后的两个参数意义相同,用于分页。

由此我们可以知道 mongodb查询数据的基本语法即为:
db.collection.find(query, projection).sort("XXX",-1).skip(pageNum).limit(pageSize)
在这里插入图片描述


1.2 简单体验mongodb的查询语法

假设我们的集合(Collection)如下,我们要查出length为1.77,年龄最大的两个用户的姓名和年龄

{ 
    "_id" : ObjectId("5d35e669f33bf0f85a919171"), 
    "username" : "lucy", 
    "country" : "china", 
    "age" : 18.0, 
    "height" : 1.79
}
{ 
    "_id" : ObjectId("5d35e669f33bf0f85a919172"), 
    "username" : "james", 
    "country" : "English", 
    "age" : 24.0, 
    "length" : 1.77
}
{ 
    "_id" : ObjectId("5d35e669f33bf0f85a919173"), 
    "username" : "deer", 
    "age" : 22.0, 
    "length" : 1.77
}
{ 
    "_id" : ObjectId("5d35e669f33bf0f85a919174"), 
    "username" : "mark", 
    "country" : "USA", 
    "age" : 33.0, 
    "length" : 1.77
}
{ 
    "_id" : ObjectId("5d35e669f33bf0f85a919175"), 
    "username" : "peter", 
    "country" : "UK"
}

查询sql如下:

db.users.find(
	{ "length" : 1.77}, //查询条件为length为1.77
	{ "username" : 1.0, "age" : 1.0} //映射,即查出的每条数据仅显示username和age,
									 //注意:映射里除了_id外,要么全为0,要么全为非0
)
.sort({ "age" : -1.0}) //按年龄从大到小排序
.limit(2); //skip(0)可以不用写,查询前两条

查询结果如下:
注意:映射里指定只查username和age,但返回的数据里有_id,这个不要奇怪,因为mongo会把_id字段默认给你返回来

{ 
    "_id" : ObjectId("5d35e669f33bf0f85a919174"), 
    "username" : "mark", 
    "age" : 33.0
}
{ 
    "_id" : ObjectId("5d35e669f33bf0f85a919172"), 
    "username" : "james", 
    "age" : 24.0
}

如果真的不需要_id的话,我们可以在映射里指定_id为0,注意,其他字段要么全为0,要么全非0
sql如下:

db.users.find(
	{ "length" : 1.77}, //查询条件为length为1.77
	{ "_id":0,"username" : 1, "age" : 1} //映射,即查出的每条数据仅显示username和age,
									 //注意:映射里除了_id外,要么全为0,要么全为非0
)
.sort({ "age" : -1.0}) //按年龄从大到小排序
.limit(2); //skip(0)可以不用写,查询前两条

结果如下:
在这里插入图片描述


当然,对于分页少不了查询满足条件的总个数,查询语句如下:

db.users.find(
	{ "length" : 1.77}, //查询条件为length为1.77
	{ "username" : 1.0, "age" : 1.0} //映射,即查出的每条数据仅显示username和age,
									 //注意:映射里除了_id外,要么全为0,要么全为非0
)
.sort({ "age" : -1.0}) //按年龄从大到小排序
.count()//统计总个数---当然统计总个数时可以不关心sort,所以上面的sort可以不用写

查询结果如下
在这里插入图片描述


说一下用可视化软件比较爽的地方:

  • 我感觉mongo的sql写起来还是比较长的,很容易因为括号等原因出错,而用可视化工具基本不会有这个问题
  • sql组装完成后可以按照不同的语言,直接生成相关代码,这就更爽了(我们组最近接了公司里的一个老项目,用的就是java的(2.X dirver API),这酸爽简直不可言喻!!!----之前mongoTemplate用多了,现在感觉这个2.X dirver API其实也蛮好用的☺☺☺)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nrsc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值