MongoDB 学习笔记(原创)
MongoDB 学习笔记
一、数据库的基本概念及操作
| SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
|---|---|---|
| database | database | 数据库 |
| table | collection | 数据库表/集合 |
| row | document | 数据记录行/文档 |
| column | field | 数据字段/域 |
| index | index | 索引 |
| table | joins | 表连接,MongoDB不支持 |
| primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
- 创建数据库
- > use mydb
- 查看当前连接的数据库
- > db
- -> mydb
- 查看所有的数据库
- > show dbs
- -> mydb
- 销毁数据库
- > use local
- switched to db local
- > db.dropDatabase()
二、集合(Collection)的基本操作
- 创建集合
- > db.creationCollection('users')
- 查看创建的集合
- > show collections
- 删除集合
- > db.users.drop()
- 向集合中插入数据
1.insert()
插入数据时,如果 users 集合没有创建会自动创建。
- > use mydb
- switched to db mydb
- > db.users.insert([
- ... { name : "jam",
- ... email : "jam@qq.com"
- ... },
- ... { name : "tom",
- ... email : "tom@qq.com"
- ... }
- ... ])
2.使用 save()
插入数据时,如果 users 集合没有创建会自动创建。
- > use mydb2
- switched to db mydb2
- > db.users.save([
- ... { name : "jam",
- ... email : "jam@qq.com"
- ... },
- ... { name : "tom",
- ... email : "tom@qq.com"
- ... }
- ... ])
- 更新数据
db.COLLECTION_NAME.update(SELECTION_CRITERIA,UPDATED_DATA)
- > use mydb2
- switched to db mydb2
- > db.mysb2.update({'name':'jam'},{'name':'bob'})
- 删除数据
db.COLLECTION_NAME.remove(DELECTION_CRITERIA)
- > use mydb2
- switched to db mydb2
- > db.mydb2.remove({'name':'tom'})
| 操作语句 | 作用 |
|---|---|
| db.createCollection('COLLECTION_NAME') | 创建集合 |
| db.COLLECTION.drop() | 删除集合 |
| db.COLLECTION_NAME.insert(document) | 插入文档 |
| db.COLLECTION_NAME.update(SELECTION_CRITERIA,UPDATED_DATA) | 更新文档 |
| db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA}) | 替换已存在的文档 |
| db.COLLECTION_NAME.remove(DELECTION_CRITERIA) | 删除文档 |
三、数据查询
- find() 语句
- > use mydb
- switched to db mydb
- > db.mydb.insert({'name':'mars','age':12,'gender':'man'})
1.不加参数时返回所有记录
- > db.mydb.find()
- { "_id" : ObjectId("589dc5f3e86d38da8455b314"), "name" : "marsggbo" }
- { "_id" : ObjectId("589dcac5e86d38da8455b315"), "name" : "mars", "age" : 12, "gender" : "man" }
2.带参数
- > use mydb
- > db.mydb.find({'name':'mars'})
- { "_id" : ObjectId("589dcac5e86d38da8455b315"), "name" : "mars", "age" : 12, "gender" : "man" }
2.1 条件操作符1
(>) 大于 - $gt #greate
(<) 小于 - $lt #low
(>=) 大于等于 - $gte #equal
(<= ) 小于等于 - $lte
2.2 条件操作符2
- type
- $type
type的值:
双精度型-1
字符串-2
对象-3
数组-4
二进制数据-5
对象ID-7
布尔类型-8
数据-9
空-10
正则表达式-11
JS代码-13
符号-14
有作用域的JS代码-15
32位整型数-16
时间戳-17
64位整型数-18
Min key-255
Max key-127
范例:
- > use student
- switched to db student
- > db.student.find({"name":{$type:2}})
查找name是字符串的文档记录
- limit和skip
limit:读取指定数量的数据记录 -limit
skip:读取时跳过指定数量的数据记录
首先查看student集合中年龄大于20的数据
- > use student
- switched to db student
- > db.student.find({'age':{$gt:20}})
- { "_id" : ObjectId("589dcf6d6ac83b9ae69f63e6"), "name" : "z", "sex" : "m
- an", "age" : 23 }
- { "_id" : ObjectId("589dcf8f6ac83b9ae69f63e8"), "name" : "z", "sex" : "m
- an", "age" : 29 }
- { "_id" : ObjectId("589dd11ce3b6b824fd0620e9"), "age" : 22, "name" : "ab
- ", "sex" : "woman" }
限制只显示一个数据后,默认显示最前面的数据
(第一行命令不用重复编写,这里是因为markdown解析非得加上这句话才能高亮。。。)
- > use student
- switched to db student
- > db.student.find({'age':{$gt:20}}).limit(1)
- { "_id" : ObjectId("589dcf6d6ac83b9ae69f63e6"), "name" : "z", "sex" : "m
- an", "age" : 23 }
跳过一条数据,则可猜想显示结果为第二个数据
- > use student
- switched to db student
- > db.student.find({'age':{$gt:20}}).limit(1).skip(1)
- { "_id" : ObjectId("589dcf8f6ac83b9ae69f63e8"), "name" : "z", "sex" : "m
- an", "age" : 29 }
- pretty() 语句
作用是使查询输出的结果更美观
- > use mydb
- > db.mydb.find().pretty()
- { "_id" : ObjectId("589dc5f3e86d38da8455b314"), "name" : "marsggbo" }
- {
- "_id" : ObjectId("589dcac5e86d38da8455b315"),
- "name" : "mars",
- "age" : 12,
- "gender" : "man"
- }
- sort() 排序
与sqlite中的排序一样有升序和降序,其中升序用1表示,降序用-1表示
示例
- > use student
- switched to db student
- > db.student.find().sort({'age':1})
- { "_id" : ObjectId("589dcf866ac83b9ae69f63e7"), "name" : "z", "sex" : "f
- eman", "age" : 19 }
- { "_id" : ObjectId("589dd11ce3b6b824fd0620e9"), "age" : 22, "name" : "ab
- ", "sex" : "woman" }
- { "_id" : ObjectId("589dcf6d6ac83b9ae69f63e6"), "name" : "z", "sex" : "m
- an", "age" : 23 }
- { "_id" : ObjectId("589dcf8f6ac83b9ae69f63e8"), "name" : "z", "sex" : "m
- an", "age" : 29 }
总结:
可以使用find进行查询,sort用于排序,ensureIndex用于建立索引,aggregate用于聚合。
原文出处:marsggbo的博客
MongoDB 学习笔记(原创)的更多相关文章
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
- PHP操作MongoDB学习笔记
<?php/*** PHP操作MongoDB学习笔记*///*************************//** 连接MongoDB数据库 **////*************** ...
- mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...
- MongoDB学习笔记(转)
MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...
- 【转】MongoDB学习笔记(查询)
原文地址 MongoDB学习笔记(查询) 基本查询: 构造查询数据. > db.test.findOne() { "_id" : ObjectId("4fd58ec ...
- MongoDB学习笔记(六)--复制集+sharding分片 && 总结
复制集+sharding分片 背景 主机 IP 服务及端口 Server A ...
- MongoDB学习笔记(五)--复制集 && sharding分片
主从复制 主从节点开启 主节 ...
- MongoDB学习笔记(四)--索引 && 性能优化
索引 基础索引 ...
- MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁
权限 绑定内网I ...
随机推荐
- CTR预估中的贝叶斯平滑方法及其代码实现
1. 背景介绍 广告形式: 互联网广告可以分为以下三种: 1)展示广告(display ad) 2)搜索广告(sponsored search ad) 3)上下文广告(contextual ad) ...
- DHCP协议
来源摘取自百度百科 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服 ...
- C语言 一维数组叠加为二维数组样例
这里参看memcpy的用法,将一个一维整型数组不停的叠加为二维数组 使用宏定义来控制二维数组的行列 代码如下: #include <stdio.h> #include <stdlib ...
- 安卓TCP通信版本2
PC做服务器,安卓做客户端. 安卓获取输入框的内容并发送,然后等待接收服务器的消息 服务器先行开启,接收到客户端的数据,然后回复消息. 实现了对线程类的封装,通过按钮启动线程发送并接收 服务器代码(j ...
- java-9 异常处理
1.异常处理的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如 ...
- iOS开发之App主题切换完整解决方案(Swift版)
本篇博客就来介绍一下iOS App中主题切换的常规做法,当然本篇博客中只是提到了一种主题切换的方法,当然还有其他方法,在此就不做过多赘述了.本篇博客中所涉及的Demo完全使用Swift3.0编写完成, ...
- cloudbase-init 自动扩盘的副作用 - 每天5分钟玩转 OpenStack(154)
这是 OpenStack 实施经验分享系列的第 4 篇. cloudbase-init 的一项功能是自动扩展 windows 的 C 盘.比如 windows 镜像是 20G,在部署 instance ...
- 剑指offer编程题Java实现——面试题5从头到尾打印链表
题目描述* 剑指offer面试题5:从尾到头打印链表 输入一个链表的头结点,从尾到头打印出每个结点的值 解决方案一:首先遍历链表的节点后打印,典型的"后进先出",可以使用栈来实现这 ...
- [前言] 实现一个Android电子书阅读APP
大家好,我是小方,我将在接下来的几篇文章中从零实现一个网络小说阅读器,从安卓编程最基础的部分讲起,直至成功完成我们的应用,从新建一个项目开始,不断添加新的代码,添加新的界面,循序渐进,涵盖所有我们需要 ...
- 用php做省份的三级联动 附带数据库
可以把它做成小插件的形式,以后需要,可以随时调 来看一下怎么来做 先来写个div然后,再引入js包 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...