首先,我们先向集合(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查询系统的更多相关文章

  1. Android查询系统的音频(音乐播放器的核心)

    //查询系统的音频库 public static List<MusicBean> getMusicInfo(Context context){ List<MusicBean> ...

  2. 用excel打造报表查询系统

    网络数据库以及ERP在中小型企业中日益风行,虽然ERP功能强大,但有的ERP报表系统中规范的报表较少,主要提供二次开发接口或通过如CRYSTALREPORT等其他报表工具进行管理,其实我们可以使用Ex ...

  3. 【云图】如何制作全国KTV查询系统?

    原文:[云图]如何制作全国KTV查询系统? 摘要:本文以[唱吧]531麦霸音乐节为案例,详细解读了如何导入自有数据到高德云图,并进行检索和展示.最后,调起高德mobile地图来进行路线规划和周边查询. ...

  4. 【百度地图API】建立全国银行位置查询系统(五)——如何更改百度地图的信息窗口内容?

    原文:[百度地图API]建立全国银行位置查询系统(五)--如何更改百度地图的信息窗口内容? 摘要: 酷讯.搜房.去哪儿网等大型房产.旅游酒店网站,用的是百度的数据库,却显示了自定义的信息窗口内容,这是 ...

  5. 【百度地图API】建立全国银行位置查询系统(四)——如何利用百度地图的数据生成自己的标注

    原文:[百度地图API]建立全国银行位置查询系统(四)--如何利用百度地图的数据生成自己的标注 摘要: 上一章留个悬念,"如果自己没有地理坐标的数据库,应该怎样制作银行的分布地图呢?&quo ...

  6. 【百度地图API】建立全国银行位置查询系统(三)——如何在地图上添加银行标注

    原文:[百度地图API]建立全国银行位置查询系统(三)--如何在地图上添加银行标注 <摘要>你将在第三章中学会以下知识: 如何在地图上添加带银行logo的标注?(你也可以换成商场logo, ...

  7. 【百度地图API】建立全国银行位置查询系统(二)——怎样为地图添加控件

    原文:[百度地图API]建立全国银行位置查询系统(二)--怎样为地图添加控件 <摘要>你将在第二章中学会以下知识: 使用手写代码的利器——notepad++: 如何为地图添加控件——鱼骨. ...

  8. 【百度地图API】建立全国银行位置查询系统(一)——如何创建地图

    原文:[百度地图API]建立全国银行位置查询系统(一)--如何创建地图 <摘要>你将在第一章中学会以下知识: 如何创建一个网页文件 怎样利用百度地图API建立一张2D地图,以及3D地图 如 ...

  9. C语言身份证信息查询系统(修改版)

    很久以前写了一个<C语言身份证信息查询系统>,如果你点击链接进去看了. 估计也会被我那磅礴大气的代码震惊到的,最近复习/学习文件操作,把代码改了改,算是对以前还不会文件操作的时候的愿望,哈 ...

随机推荐

  1. 【one day one linux】grep工具

    grep  筛选功能 学习这些命令采用20/80原则,这样,可以达到使用%20的命令选项,处理80%的情况. #grep 的使用格式 grep [option] pattern file 那么接下来看 ...

  2. jQuery制作右侧边垂直二级导航菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. MetaProducts Offline Explorer使用简易教程

    MetaProducts Offline Explorer使用简易教程 by windtrace  20170419 最近想下载一个网站上的内容打包成chm文件,以便离线浏览,webzip太长时间不更 ...

  4. C#处理JSON 数据

    网络中数据传输经常是xml或者json,现在做的一个项目之前调其他系统接口都是返回的xml格式,刚刚遇到一个返回json格式数据的接口,通过例子由易到难总结一下处理过程,希望能帮到和我一样开始不会的朋 ...

  5. 对java面向对象的初识

    我其实一直想写点东西练练自己文笔,今天写下这篇技术类型的文章也没有一个好的格式和章法,但万事开头难,那么就从面向对象开始. 我们大部分人都知道互联网软件的存在,时刻影响了我们的现实生活,那么面向对象的 ...

  6. GreenDao教程1

    最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个框架还是不错的.直接面向对象的,可以通过对对象的操作,实现数据的存储. 但是官网上的API是在不敢恭维,文档写的很糙,看了半天,才搞懂一 ...

  7. Linux基础网络搭建实验

    一.实验目标 利用3台虚拟机,搭建vmnet2和vmnet3两个host-only网络,实现两个网络的互联 二.实验环境   内网 外网 网关 IP 192.168.0.10/24 202.3.4.1 ...

  8. undo表空间

    undo表空间undo表空间的管理,主要包括创建.删除.修改.切换.其中需要注意的是不能在undo表空间创建数据库对象,还有就是只能是单文件或大文件表空间. 创建创建主要有两种方法,一种是在创建数据库 ...

  9. Printk与sched_clock_init的一点分析

    在分析Linu内核启动的过程中,发现一段"不平常"的日志,感觉产生这段日志的代码肯定是"不可思议"的.因此就大致分析了一下: 日志如下: [ 0.000000] ...

  10. C#基础知识-函数的定义和调用(五)

    函数也可以称为方法,可以很方便的把一些行为封装到函数里面,当调用这一函数时会把函数块里面的代码按照顺序执行,方法可以有多种形式,有无参数,有无返回值等. 1. 函数的定义   函数定义的基本格式: s ...