MongoDB 数据库(2)
db.collectionName 集合对象
获取集合对象
db.getCollection('collection_name')
e.g.
db.getCollection("class0").insert({name:'悟空',age:1700})
查找操作
# select ... from tableName where .....
db.collectionName.find() ---> select * from tableName
find(query,field)
功能 : 查找所有符合条件的文档
参数 : query : 筛选条件 相当于where字句
field : 展示的域 相当于select的展示部分
返回 : 返回所有查找到的内容
field 参数 : 选择要展示的域 传一组键值对
键表示域名
值表示是否显示该域 0 表示不显示 1 表示显示
- 如果某个域给定0 则表示不显示该域,其他的域均显示
如果某个域给定1 则表示显示该域 ,其他的域都不显示 - _id 永远默认为显示,除非设置为0
- 除_id外其他域 必须拥有相同的设置,全为0或者全为1
- 如果不写该参数则表示显示所有域内容
e.g. db.class0.find({},{_id:0,name:1,age:1})
query : 以键值对的形式给出查找条件
查找年龄 17
e.g. db.class0.find({age:17},{_id:0})
* 如果不写第一个参数则表示查找所有内容
findOne()
- 功能参数和find() 完全相同,只是只返回第一条查找到的文档
e.g. db.class0.findOne({age:17},{_id:0})
query的更多用法
操作符: 使用$符号注明一个特殊字符串,表示一定的含义
e.g. $lt 表示 小于
比较操作符
$eq 等于
e.g. db.class0.find({age:{$eq:17}},{_id:0})
筛选年龄等于17的
=====》 db.class0.find({age:17},{_id:0})
$lt 小于 <
e.g. db.class0.find({age:{$lt:17}},{_id:0})
mongo中字符串也可以比较大小
$lte 小于等于 <=
e.g. db.class0.find({age:{$lte:17}},{_id:0})
$gt 大于 >
e.g. db.class0.find({age:{$gt:17}},{_id:0})
$gte 大于等于 >=
e.g. db.class0.find({age:{$gte:17}},{_id:0})
$ne 不等于 !=
e.g. db.class0.find({age:{$ne:17}},{_id:0})
如果一个文档没有这个age域则显示为不等于
$in 包含
e.g. db.class0.find({age:{$in:[16,17,18]}},{_id:0})
$nin 不包含
e.g. db.class0.find({age:{$nin:[16,17,18]}},{_id:0})
逻辑操作符
$and 逻辑与
年龄小于19 并且 性别为男
db.class0.find({age:{$lt:19},sex:'m'},{_id:0})
年龄小于19 并且 大于15
db.class0.find({age:{$lt:19,$gt:15}},{_id:0})
e.g. db.class0.find({$and:[{age:17},{name:'Lei'}]})
$or 逻辑或
e.g.
db.class0.find({$or:[{age:{$lt:22}},{name:'悟空'}]},{_id:0})
db.class0.find({$or:[{age:{$lt:18}},{age:{$gt:30}}]},{_id:0})
$not 逻辑非
e.g. db.class0.find({age:{$not:{$eq:17}}},{_id:0})
$nor 既不也不 (表示列表集合中的条件都不具备)
db.class0.find({$nor:[{age:{$gt:18}},{sex:'m'}]},{_id:0})
条件混合
(年龄小于20 或者 姓名为阿红) 并且 性别为女的人
db.class0.find({$and:[{$or:[{age:{$lt:20}},{name:'阿红'}]},{sex:'w'}]},{_id:0})
年龄小于等于17 或者 (姓名大于Tom 并且 年龄大于100)
db.class0.find({$or:[{age:{$lte:17}},{name:{$gt:'Tom'},age:{$gt:100}}]},{_id:0})
数组查找 :
查看数组中包含某一项的
e.g. db.class1.find({hobby:'吃'},{_id:0})
$all
查找一个数组中同时包含多项的文档
e.g. db.class1.find({hobby:{$all:['拍电影','代言']}},{_id:0})
查找hobby数组中既有拍电影,又有代言的文档
$size
查找数组元素个数为指定个数的文档
e.g. db.class1.find({hobby:{$size:3}},{_id:0})
查找hobby数组中包含三项的文档
$slice
对数组切片显示
e.g.
db.class1.find({hobby:{$size:3}},{_id:0,hobby:{$slice:2}})
显示数组的前两项
e.g.
db.class1.find({hobby:{$size:3}},{_id:0,hobby:{$slice:[1,2]}})
跳过第一项,显示后面两项
其他查找方法:
$exists
判断一个域是否存在
e.g. 查找存在sex域的文档
db.class0.find({sex:{$exists:true}},{_id:0})
e.g. 查找不存在sex域的文档
db.class0.find({sex:{$exists:false}},{_id:0})
$mod
做除数余数查找
e.g.
查找年龄 被2除余1的文档
db.class0.find({age:{$mod:[2,1]}},{_id:0})
$type
查找指定数据类型的文档
e.g. 查找hobby中包含数据类型为 2 的数据的文档
db.class1.find({hobby:{$type:2}},{_id:0})
进一步的信息筛选
distinct()
- 功能 : 查看一个集合中某个域值的覆盖范围
e.g. 查看集合中age域的值都有哪些
db.class0.distinct('age')
pretty()
- 功能 : 将查询结果格式化显示
e.g. db.class0.find().pretty()
limit(n)
- 功能: 查询结果显示前 n条
e.g. 查询结果显示前3个
db.class0.find({},{_id:0}).limit(3)
skip(n)
- 功能 : 显示时跳过前n条
e.g. 显示时跳过前三条
db.class0.find({},{_id:0}).skip(3)
count()
- 功能 :对查找结果计数统计
e.g. 统计sex 为 m的文档数量
db.class0.find({sex:'m'},{_id:0}).count()
sort({键:1/-1})
- 功能 : 对查找结果排序
- 1 表示按照升序排列
- -1 表示按照降序排列
对查找结果按照年龄升序排列
db.class0.find({age:{$exists:true}},{_id:0}).sort({age:1})
复合排序 : 当第一排序项相同的时候,按照第二排序项排序
db.class0.find({age:{$exists:true}},{_id:0}).sort({age:1,name:-1})
函数的连续使用
- 获取集合中年龄最小的三个文档
db.class0.find({},{_id:0}).sort({age:1}).limit(3)
- 删除文档
db.collectionName.remove(query,justOne)
功能 : 删除指定的文档
参数 : query : 筛选要删除的文档, 类似where子句
用法同 查找操作
justOne :布尔值 默认 false 表示删除所有筛选数据
如果赋值为true 则表示只删除第一条复合的文档
e.g.
db.class0.remove({$or:[{age:{$exists:false}},{age:{$gt:100}}]})
删除第一个复合条件的文档
db.class0.remove({sex:{$exists:false}},true)
删除集合中所有文档
db.collectionName.remove({})
1. 创建一个数据库 名字grade
use grade
2. 数据库中创建一个集合名字 class
3. 集合中插入若干数据 文档格式如下
{name:'zhang',age;10,sex:'m',hobby:['a','b','c']}
hobby: draw sing dance basketball football pingpong
computer
db.class.insert([
{name:"zhang",age:10,sex:'m',hobby:['a','b','c']},.....
])
4. 查找练习
查看班级所有人信息
find()
查看班级中年龄为8岁的学生信息
find({age:8})
查看年龄大于10岁的学生信息
find({age:{$gt:10}})
查看年龄在 4---8岁之间的学生信息
find({age:{$gte:4,$lte:8}})
找到年龄为6岁且为男生的学生
find({age:6,sex:'m'})
找到年龄小于7岁或者大于10岁的学生
find({$or:[age:{$lt:7},age:{$gt:10}]})
找到年龄是8岁或者11岁的学生
find({age:{$in:[8,11]}})
找到兴趣爱好有两项的学生
find({hobby:{$size:2}})
找到兴趣爱好有draw的学生
find({hobby:"draw"})
找到既喜欢画画又喜欢跳舞的学生
find({hobby:{$all:["draw","dance"]}})
统计爱好有三项的学生人数
find({hobby:{$size:3}}).count()
找出本班年龄第二大的学生
find().sort({age:-1}).skip(1).limit(1)
查看学生的兴趣范围
db.class.distinct('hobby')
将学生按年龄排序找到年龄最大的三个
find().sort({age:-1}).limit(3)
删除所有 年级大于12或者小于4岁的学生
remove({$or:[{age:{$gt:12}},{age:{$lt:4}}]})
MongoDB 数据库(2)的更多相关文章
- Mongodb数据库学习系列————(一)Mongodb数据库主从复制的搭建
Mongodb数据库主从复制的搭建 Writeby:lipeng date:2014-10-22 最近项目上用到了位置查询,在网上 ...
- 基于C#的MongoDB数据库开发应用(4)--Redis的安装及使用
在前面介绍了三篇关于MongoDB数据库的开发使用文章,严格来讲这个不能归类于MongoDB数据库开发,不过Redis又有着和MongoDB数据库非常密切的关系,它们两者很接近,Redis主要是内存中 ...
- FineReport如何连接和使用MongoDB数据库
随着NoSQL数据库越来越流行,MongoDB数据库作为NoSQL数据库中的领头羊,使用也越来越广泛.为此,FineReport V8.0版本提供了数据连接和数据集接口,可以通过开发一款可以连接和使用 ...
- python操作mongodb数据库
一.MongoDB 数据库操作 连接数据库 import pymongo conn = pymongo.Connection() # 连接本机数据库 conn = pymongo.Connection ...
- NoSql 中Mongodb数据库的使用
1.NoSql数据库简介 2.MongoDB数据库的简介 3.MongoDB下Windows下的安装
- 线上mongodb数据库mLab使用总结
最近在CNode社区看到有人分享了免费的线上mongodb数据库(容量500M),今天去注册了一下,成功的将线下数据库替换掉了,现在就说一下它的使用和配置需要注意的地方: mLab是一款免费的在线mo ...
- mongoDB数据库和Spring MVC的整合
之前一直用到的项目是Spring MVC+maven+mysql的,最近有些数据需要用到mongoDB数据库,现在做一些总结. 第一步:加载jar.maven配置 <!-- mongodb开始 ...
- 【转载】CentOS6.5_X64下安装配置MongoDB数据库
[转载]CentOS6.5_X64下安装配置MongoDB数据库 2014-05-16 10:07:09| 分类: 默认分类|举报|字号 订阅 下载LOFTER客户端 本文转载自zhm&l ...
- 基于C#的MongoDB数据库开发应用(3)--MongoDB数据库的C#开发之异步接口
在前面的系列博客中,我曾经介绍过,MongoDB数据库的C#驱动已经全面支持异步的处理接口,并且接口的定义几乎是重写了.本篇主要介绍MongoDB数据库的C#驱动的最新接口使用,介绍基于新接口如何实现 ...
- 基于C#的MongoDB数据库开发应用(2)--MongoDB数据库的C#开发
在上篇博客<基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用>里面,我总结了MongoDB数据库的一些基础信息,并在最后面部分简单介绍了数据库C#驱动的 ...
随机推荐
- Swift-assert使用时机
什么时候使用断言呢? 包含下面的情况时使用断言: 1.整型下标索引作为值传给自定义索引实现的参数时,但下标索引值不能太低也不能太高时,使用断言 2.传值给函数但如果这个传过来的值无效时,函数就不能完成 ...
- 【Linux】- 不可不知的小技巧
1.Tab键:输入文件或目录名的前几个字符,然后按TAB键,如无相重的,完整的文件名立即自动在命令行出现:如有相重的,再按一下TAB键,系统会列出当前目录下所有以这几个字符开头的名字. 在命令行下,只 ...
- 《Effective C#》快速笔记(五)- - C# 中的动态编程
静态类型和动态类型各有所长,静态类型能够让编译器帮你找出更多的错误,因为编译器能够在编译时进行大部分的检查工作.C# 是一种静态类型的语言,不过它加入了动态类型的语言特性,可以更高效地解决问题. 一. ...
- 高性能python
参考来源:Python金融大数据分析第八章 提高性能有如下方法 1.Cython,用于合并python和c语言静态编译泛型 2.IPython.parallel,用于在本地或者集群上并行执行代码 3. ...
- touchSwipe 上下左右滑动,二指缩放 效果不好。
$(function(){ var _showImgW; var _showImgH; var _showImgMT; var _showImgML; $("#imgDiv").s ...
- 第一篇:python基础_1
本篇内容 Python介绍 安装 第一个程序(hello,world) 变量 用户输入(input) 数据类型 数据运算 if判断 break和continue的区别 while 循环 一. Pyth ...
- request 域 个人理解
1.转发到另一个servlet时候 地址还是输入当前的servlet 2.通过服务器转到另一个servlet时候 另一个servlet是最终接收端 端到端模式 相当于这个东西是发给自己的 只不过经过多 ...
- BZOJ2151 种树(贪心+堆+链表/wqs二分+动态规划)
dp容易想到,但没法进一步优化了. 考虑贪心,每次选出价值最大的物品.但这显然是不对的因为会影响其他物品的选择. 于是考虑加上反悔操作.每次选出一个物品后,将其相邻两物品删除,再将原物品价值变为相邻两 ...
- css边框以及其他常用样式
1. 边框是1像素,实体的,红色的. <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- [牛客Wannafly挑战赛27D]绿魔法师
description newcoder 给你一个空的可重集合\(S\). \(n\)次操作,每次操作给出\(x\),\(k\),\(p\),执行以下操作: \(opt\ 1\):在S中加入x. \( ...