mongo查询系统
首先,我们先向集合(collections)中添加测试文档(documents)。如下:
> for(i=1;i<=5;i++) db.test.insert({x:i,y:i*i,z:6-i})
WriteResult({ "nInserted" : 1 })
1、下面查看我们插入的数据:
> db.test.find()
{ "_id" : ObjectId("59361be7c718d6f408c6cae5"), "x" : 1, "y" : 1, "z" : 5 }
{ "_id" : ObjectId("59361be7c718d6f408c6cae6"), "x" : 2, "y" : 4, "z" : 4 }
{ "_id" : ObjectId("59361be7c718d6f408c6cae7"), "x" : 3, "y" : 9, "z" : 3 }
{ "_id" : ObjectId("59361be7c718d6f408c6cae8"), "x" : 4, "y" : 16, "z" : 2 }
{ "_id" : ObjectId("59361be7c718d6f408c6cae9"), "x" : 5, "y" : 25, "z" : 1 }
2、只查看部分数据字段
> db.test.find({},{_id:0,x:1})
{ "x" : 1 }
{ "x" : 2 }
{ "x" : 3 }
{ "x" : 4 }
{ "x" : 5 }(其中,第一个{}中是筛选条件,第二个{}中是决定哪些数据字段显示,即过滤器,0表示不显示,1表示显示)
3、按指定条件筛选数据
> db.test.find({x:1},{_id:0})
{ "x" : 1, "y" : 1, "z" : 5 }
4、比较部分
|
操作 |
格式 |
范例 |
|
等于 |
{<key>:<value>} |
db.col.find({x:1,y:1}).pretty() |
|
小于 |
{<key>:{$lt:<value>}} |
db.col.find({x:{$lt:3}}).pretty() |
|
小于或等于 |
{<key>:{$lte:<value>}} |
db.col.find({x:{$lte:3}}).pretty() |
|
大于 |
{<key>:{$gt:<value>}} |
db.col.find({x:{$gt:3}}).pretty() |
|
大于或等于 |
{<key>:{$gte:<value>}} |
db.col.find({x:{$gte:3}).pretty() |
|
不等于 |
{<key>:{$ne:<value>}} |
db.col.find({x:{$ne:1}}).pretty() |
|
范围选择1 |
{<key>:{$lt:<val>,$gte:<val>}} |
db.test.find({x:{$lt:4,$gte:2}}) |
|
范围选择2 |
{<key>:{$in:[value1,value2]}} |
db.test.find({x:{$in:[1,2]}}) |
|
范围选择3 |
{<key>:{$nin:[value1,value2]}} |
db.test.find({x:{$nin:[1,2]}}) |
其中,$nin、$ne等是一种比较低效的查询选择器,它们会进行全表扫描,因此,最好不要单独使用。并且单独使用$ne也不会利用索引的优势,非常低效。
5、And与Or
|
操作 |
格式 |
范例 |
效果 |
|
And |
{$and:[{<key>:<value>},{}....]} |
db.test.find({$and:[{x:2},{y:4}]},{_id:0}) |
{ "x" : 2, "y" : 4, "z" : 4 } |
|
Or |
{$or:[{<key>:<value>},{}....]} |
db.test.find({$or:[{x:2},{y:1}]},{_id:0}) |
{ "x" : 1, "y" : 1, "z" : 5 } { "x" : 2, "y" : 4, "z" : 4 } |
|
And Or |
省略 |
db.test.find({x:{$lt:4},$or:[{y:4},{z:5}]},{_id:0}) |
{ "x" : 1, "y" : 1, "z" : 5 } { "x" : 2, "y" : 4, "z" : 4 } |
6、exists
在mongodb中$exists与关系数据库中的exists不一样,因为在MongoDB中表(集合collection)结结构不是固定的,有的时候需要返回包含有某个字段的所有记录或者不包含某个字段的所有字段,$exists这时就可以派上用场了。此处我们为了测试就在插入一条数据:
> db.test.insert({x:1,y:1,flag:true})
WriteResult({ "nInserted" : 1 })
下面我们假设需要访问包含flag字段的文档,如下:
> db.test.find({flag:{$exists:true}})
{ "_id" : ObjectId("59364d6561dce208b23fc306"), "x" : 1, "y" : 1, "flag" : true }
当然,为了实现这种需求,我们也可以用另外一种语句来代替$exists
> db.test.find({flag:{$ne:null}})
{ "_id" : ObjectId("59364d6561dce208b23fc306"), "x" : 1, "y" : 1, "flag" : true }
7、嵌套查询
下面,向test中添加一个嵌套形式的数据,即某个字段的值也是一个BSON对象
> db.test.insert({id:1,name:"xiaoming",detail:{sex:"male",age:20}})
WriteResult({ "nInserted" : 1 })
> db.test.find({"detail.age":20}).pretty()
{
"_id" : ObjectId("5936507961dce208b23fc307"),
"id" : 1,
"name" : "xiaoming",
"detail" : {
"sex" : "male",
"age" : 20
}
}
嵌套查询时匹配的key如果有多级嵌套深度,就一级一级地用点号展开
8、数组操作
> db.test.insert({id:1,name:"xiaoliang",detail:[{sex:"male",age:22},{address:"china",post:5}]})
WriteResult({ "nInserted" : 1 })
> db.test.find({"detail.1.post":5}).pretty()
{
"_id" : ObjectId("593655b461dce208b23fc308"),
"id" : 1,
"name" : "xiaoliang",
"detail" : [
{
"sex" : "male",
"age" : 22
},
{
"address" : "china",
"post" : 5
}
]
}
匹配字符串中先取需要匹配的key(detail),由于detail键对应的value为数组,detail.1表示要取数组中的第2个位置处的元素,又由于数组的元素有是个BSON文档对象,因此,我们可以通过detail.1.post定位到需要匹配的键。
9、查询最新数据
> db.ttt.find().pretty()
{
"_id" : ObjectId("593270bd0976e8f92b2d4514"),
"id" : 1,
"StatusInfo" : [
{
"status" : 9,
"desc" : "已取消"
},
{
"status" : 2,
"desc" : "已付款"
}
]
}
这是我们的测试数据,在现实需求中我们经常遇到需要查询的是最新数据,对于数据类型,我们有专门的操作符$silce来完成
> db.ttt.find({id:1},{_id:0,"StatusInfo":{"$slice":-1},"StatusInfo.desc":1})
{ "StatusInfo" : [ { "desc" : "已付款" } ] }
10、正则查询
> db.test.find({age:20})
{ "_id" : ObjectId("59365ce461dce208b23fc309"), "name" : "zhangsan", "age" : 20 }
{ "_id" : ObjectId("59365ced61dce208b23fc30a"), "name" : "zhanan", "age" : 20 }
查询"name"以"zhan"开头的数据:
> db.test.find({name:{$regex:"zhan"}})
{ "_id" : ObjectId("59365ce461dce208b23fc309"), "name" : "zhangsan", "age" : 20 }
{ "_id" : ObjectId("59365ced61dce208b23fc30a"), "name" : "zhanan", "age" : 20 }
当然还是可以这样的:
> db.test.find({name:/zhan/})
{ "_id" : ObjectId("59365ce461dce208b23fc309"), "name" : "zhangsan", "age" : 20 }
{ "_id" : ObjectId("59365ced61dce208b23fc30a"), "name" : "zhanan", "age" : 20 }
> db.test.find({name:/han/})
{ "_id" : ObjectId("59365ce461dce208b23fc309"), "name" : "zhangsan", "age" : 20 }
{ "_id" : ObjectId("59365ced61dce208b23fc30a"), "name" : "zhanan", "age" : 20 }
忽略大小写查询
> db.test.find({name:{$regex:"zhan",$options:"$i"}})
{ "_id" : ObjectId("59365ce461dce208b23fc309"), "name" : "zhangsan", "age" : 20 }
{ "_id" : ObjectId("59365ced61dce208b23fc30a"), "name" : "zhanan", "age" : 20 }
{ "_id" : ObjectId("59365f1161dce208b23fc30b"), "name" : "ZHANbsd", "age" : 22 }
> db.test.find({name:/zhan/i})
{ "_id" : ObjectId("59365ce461dce208b23fc309"), "name" : "zhangsan", "age" : 20 }
{ "_id" : ObjectId("59365ced61dce208b23fc30a"), "name" : "zhanan", "age" : 20 }
{ "_id" : ObjectId("59365f1161dce208b23fc30b"), "name" : "ZHANbsd", "age" : 22 }
mongo查询系统的更多相关文章
- Android查询系统的音频(音乐播放器的核心)
//查询系统的音频库 public static List<MusicBean> getMusicInfo(Context context){ List<MusicBean> ...
- 用excel打造报表查询系统
网络数据库以及ERP在中小型企业中日益风行,虽然ERP功能强大,但有的ERP报表系统中规范的报表较少,主要提供二次开发接口或通过如CRYSTALREPORT等其他报表工具进行管理,其实我们可以使用Ex ...
- 【云图】如何制作全国KTV查询系统?
原文:[云图]如何制作全国KTV查询系统? 摘要:本文以[唱吧]531麦霸音乐节为案例,详细解读了如何导入自有数据到高德云图,并进行检索和展示.最后,调起高德mobile地图来进行路线规划和周边查询. ...
- 【百度地图API】建立全国银行位置查询系统(五)——如何更改百度地图的信息窗口内容?
原文:[百度地图API]建立全国银行位置查询系统(五)--如何更改百度地图的信息窗口内容? 摘要: 酷讯.搜房.去哪儿网等大型房产.旅游酒店网站,用的是百度的数据库,却显示了自定义的信息窗口内容,这是 ...
- 【百度地图API】建立全国银行位置查询系统(四)——如何利用百度地图的数据生成自己的标注
原文:[百度地图API]建立全国银行位置查询系统(四)--如何利用百度地图的数据生成自己的标注 摘要: 上一章留个悬念,"如果自己没有地理坐标的数据库,应该怎样制作银行的分布地图呢?&quo ...
- 【百度地图API】建立全国银行位置查询系统(三)——如何在地图上添加银行标注
原文:[百度地图API]建立全国银行位置查询系统(三)--如何在地图上添加银行标注 <摘要>你将在第三章中学会以下知识: 如何在地图上添加带银行logo的标注?(你也可以换成商场logo, ...
- 【百度地图API】建立全国银行位置查询系统(二)——怎样为地图添加控件
原文:[百度地图API]建立全国银行位置查询系统(二)--怎样为地图添加控件 <摘要>你将在第二章中学会以下知识: 使用手写代码的利器——notepad++: 如何为地图添加控件——鱼骨. ...
- 【百度地图API】建立全国银行位置查询系统(一)——如何创建地图
原文:[百度地图API]建立全国银行位置查询系统(一)--如何创建地图 <摘要>你将在第一章中学会以下知识: 如何创建一个网页文件 怎样利用百度地图API建立一张2D地图,以及3D地图 如 ...
- C语言身份证信息查询系统(修改版)
很久以前写了一个<C语言身份证信息查询系统>,如果你点击链接进去看了. 估计也会被我那磅礴大气的代码震惊到的,最近复习/学习文件操作,把代码改了改,算是对以前还不会文件操作的时候的愿望,哈 ...
随机推荐
- CSS样式表初学,比C#和JS简单
今天咱们一起来看下CSS样式表的基本基础 经常看博客或者喜欢钻研代码这一类的人对CSS可能有所耳闻,但具体的可能不是很清楚 那什么是CSS呢?与HTML又有什么区别呢?今天咱们就来说道下这个CSS C ...
- 【 js 模块加载 】深入学习模块化加载(node.js 模块源码)
一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须按照一定的格式编写.AMD,CMD,CommonJS 是目前最常用的三种模块化书写规范. 1.AMD(Asy ...
- Google Code Jam 2016 Round 1B Problem C. Technobabble
题目链接:https://code.google.com/codejam/contest/11254486/dashboard#s=p2 大意是教授的学生每个人在纸条上写一个自己的topic,每个to ...
- c# 基础算法(一) 九九乘法
闲来无事,偶见某贴子里面讨论面试题.突然对一题产生了兴趣,做一道99乘法打印(主要是我工作了2家单位,还没有一家单位在面试时给我出这一道题)于是试着自己写写看.大概逻辑如下 class program ...
- 如何设置文本不换行省略号显示等CSS常用文本属性
如何让多余的文本省略号显示首先要说几个属性的作用: whitespace:nowrap 中文行末不断行显示 overflow: 控制超出文本的显示方式:hidden 超出范围文本隐藏:scroll 始 ...
- myeclipse中文乱码
解决myeclipse中乱码问题. 改变整个Eclipse工作空间的编码格式 window->preferences->General->workspace中 把text file ...
- mui开发app之自定义事件以更新其他页内容
我之前做过jquery mobile的开发,那还是前年的事情 在jquery mobile中,由于页面是存储在div[data-role=page]的dom中(jqmobile通过对data-role ...
- 高性能日志类KLog(已开源代码)
项目开源地址:https://github.com/ihambert/KLog 上回介绍了超简易日志类,但他有诸多的局限性,注定了不能作为一个网站的日志类. 那什么样的日志类才能用于网站呢.首先来假 ...
- 忘记了root密码,如何进入系统?
Issue 问题 忘记了root密码不能进入系统 如何进入系统? 环境 红帽企业版Linux所有版本 解决方法 可以进入单用户模式或者援救模式来改变root密码,如何进入单用户模式取决引导加载程序. ...
- Set up HTTP/2 server with Spring Boot 【基于Spring boot搭建http2.0服务器】
1. Server side With spring boot, we can set up a http server easily. Restcontroller make it easier t ...