mongodb新手扫盲
前言
- mongodb是什么?, 需fq
- 如何安装mongodb?
数据库基本命令
显示所有数据库:
show dbs创建/使用数据库:
use dbName创建数据库表,在mongoDB里又将表称为集合(collections), 因此创建表:
db.createCollection("collectionName")显示数据库下的所有集合(表):
show tables / show collections删除当前数据库:
db.dropDatabase()查看当前所使用的数据库:
db.getName()显示当前数据库的状态:
db.stats()显示当前数据库的版本:
db.version()
注意: collection和table概念差不多,doc和row概念差不多。
集合(表)命令
增加数据
创建一个集合:
db.createCollection("tableName")添加文档:
```
db.tableName.insert({username: "john", age: "18"})
// 或者
db.tableName.save({username: "john", age: "18"});
// 它们之间的区别
// 1. 使用save,如果对象不存在则插入,如果存在,则会调用update方法。如果是insert,或忽略调用update方法。
// 2. insert可以插入一个列表,而不用遍历,效率高。而save需要遍历,效率不如insert。
### 删除数据
1. 删除操作: `db.tableName.remove({age: 18})`
db.tableName.remove({});
### 更新数据
1. 使用update()更新
db.tableName.update({age: 18}, {$inc: {age:10}}, false ,true)
// 等价于
update tableName set age = age + 10 where age = 18;
// 关于update
db.collection.update(
// {}里的是可选的
// upsert为true表示如果记录存在就更新,不存在就插入新的记录。
// multi为true表示更新所有匹配的文档,如果为false表示只更新第一个文档(默认行为)。
2. 使用save()命令实现upsert
// 如果不指定'_id'值,save()命令会认为它是一个插入操作。
// 如果指定,就是更新。
db.calendars.save({'uid': 'yuzf', 'projectId': 'test'}); // 插入一条数据
db.calendars.save({'_id': 'test', 'uid': 'yuzf', 'projectId': 'test'}); // 更新一条数据
3. 自动更新信息
// 将name为yuzf的人的成绩加4,如果存在就更新,不存在就创建。
db.stu.update({'name': 'yuzf'}, {$inc: {grade: 4}}, {upsert: true});
// 设置字段值
db.stu.update({'name': 'yuzf'}, {$set: {'grade': 200}});
// 删除指定字段
db.stu.update({'name': 'yuzf'}, {$unset: {'grade': 200}});
4. 还有一些其他的,这里只介绍了常用的。
### 查询数据
1. 获取指定名称的集合: `db.getCollection("tableName")`
2. 获取集合里所有的数据:
db.tableName.find().pretty();
3. 获取集合里的指定数据:
db.users.find({'uid', 'yuzf'}).pretty();
4. 获取集合里的指定数据,然后指向看指定数据, 在第二个参数里添加键,并设置键的值为1即可:
db.users.find({'uid': 'yuzf'}, {'uid': 1}).pretty();
```
- 使用函数sort, limit, skip
- 以uid进行排序:
db.users.find().sort({ 'uid': 1 }); - 限制查询结果返回的最大数目为10:
db.users.find().limit(10); - 返回查询结果除了前20条的文档的其他文档:
db.users.find().skip(20);
- 使用固定集合、自然顺序和$natural
- 固定集合必须使用
createCollection(), 以显示的方式创建:db.createCollection("users", {capped: true, size: 20480}) - 因为固定集合的顺序和插入顺序是一样的, 如果想要逆转排序:
db.users.find().sort({ $natural: -1 }).limit(10);
获取单个文档:
db.users.findOne();- 使用常用的聚合命令
count, distinct, group
- 统计users表里有多少个文档:
db.users.count(); - 去重:
db.users.distinct('uid');, 将会返回一个数组,数组里包含的元素是去重了的uid。 将结果分组:
db.calendars.group({ key: {uid: true}, initial: {total: 0}, reduce: function(items, prev) { prev.total += 1; } }); // 以uid进行分组。 // 为每个已分组的结果提供一个基数。 // 正在遍历的当前文档和聚集计数对象(我认为就是那个基数)。 // 最后的结果格式数据是: [ { 'uid': 'yuzf', 'total': 1, }, { 'uid': 'test', 'total': 3, } ]
- 使用条件操作符
- 执行大于和小于($lt,$gt,$lte,$gte)比较:
db.users.find({ departmentNumber: {$lt: 100} }); - 获取除uid为yuzf以外的其他文档:
db.calendars.find({'uid': {$ne: 'yuzf'}}).pretty(); - 指定一个匹配的数组($in):
db.calendars.find({'uid': {$in: ['yuzf', 'yangh']}}).pretty(); - 查找某个不在数组中的值:
db.calendars.find({'uid': {$nin: ['yuzf', 'yangh']}}).pretty(); - 匹配文档中的所有属性($all):
db.calendars.find({'uid': {$all: ['yuzf', 'yangh']}}).pretty(); - 在文档中搜索多个表达式:
db.calendars.find({'uid': {$or: ['yuzf, 'yangh'']}}).pretty(); - 使用slice来获取文档(分页):
不知道为什么,自己跑的时候报错,$slice unknown operator - 还有一些其他的,感觉不是很常用。
mongoose的使用
未完待续...
参考:
mongodb新手扫盲的更多相关文章
- mongodb新手入门,mongodb命令学习
下面来总结一下mongodb新手入门的常用命令吧.要是您是mongodb新手,可以看下. 1,show dbs 查询mongodb里面的数据库列表 如果想查看当前连接在哪个数据库下面,可以直接输入db ...
- mongodb新人扫盲
前言 数据库基本命令 集合(表)命令 增加数据 删除数据 更新数据 使用update()更新 使用save()命令实现upsert 自动更新信息 查询数据 mongoose的使用 前言 mongodb ...
- MongoDB 快速扫盲贴
长话短说 经过996的历练,开发者潜意识里总是以object的视角看待事物, 现在某些数据库也具备这样的视角. MongoDB是一个文档型(类JSON 文档)数据库,相比传统的关系型row/colum ...
- Linux实战教学笔记05:远程SSH连接服务与基本排错(新手扫盲篇)
第五节 远程SSH连接服务与基本排错 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 远程连接LInux系统管理 1.1 为什么要远程连接Linux系统 在实际的工作场景中,虚拟机界面或物理 ...
- Linux新手扫盲(转载)
一. Linux特点 1.免费/开源: 2.支持多线程/多用户: 3.安全性好: 4.对内存和文件管理优越. Linux最小只需4M ——> 嵌入式开发 二. 文件目录 Linux系统所有软硬件 ...
- Linux新手扫盲
一. Linux特点 1.免费/开源: 2.支持多线程/多用户: 3.安全性好: 4.对内存和文件管理优越. Linux最小只需4M ——> 嵌入式开发 二. 文件目录 Linux系统所有软硬件 ...
- X32,X64,X86 代表什意义
X32,X64,X86是什么意思 各代表什么:X86指32位,X64指64位,现在用户最多的是XP,但win7是趋势,发展很快,建议你装个win7 32位的系统,下载的话地方很多,官方安装原版和gho ...
- Mac新手从入门到放弃MongoDB
1. 简介 MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最 ...
- 新手立体四子棋AI教程(1)——基础扫盲
一.引言 最近身边好几个朋友开始玩立体四子棋,激起了我的好奇心.那么首先来说什么是[立体四子棋],规则又是如何呢? 上图即为立体四子棋,规则类似于五子棋四子连在一起,但是四子棋更加多样.丰富.不仅可以 ...
随机推荐
- raise RuntimeError("autoconf error") RuntimeError: autoconf error
pip 安装模块时遇到下错误,没有粘贴全,差不多都是这样.这个情况是 pip 安装模块 需要 gcc 及 python-devle 支持, ubuntu 是 python-dev ,使用Yum 安装即 ...
- Tcl与Design Compiler (十一)——其他的时序约束选项(二)
本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 前面介绍的设计都不算很复杂,都是使用时钟的默认行为 ...
- POPTEST老李谈Debug和Release的区别(c#) 1
POPTEST老李谈Debug和Release的区别(c#) poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...
- State模式学习笔记
选用了一个假设需要用户验证的例子进行State模式学习,这个例子并不恰当.无所谓了,只要能学习到其中的内容即可. 适用性: 1,一个对象的行为取决于他的状态,并且它必须在运行时刻依据状态改变他的行为. ...
- (一)一起学 Java Collections Framework 源码之 概述
. . . . . 目录 (一)一起学 Java Collections Framework 源码之 概述 JDK 中很多类 LZ 已经使用了无数次,但认认真真从源码级研究过其原理的还只占少数,虽然从 ...
- Asp .Net MVC4笔记之走进MVC
一.MVC三层架构: mvc三层架构,大家都比较熟悉了,这里再介绍一下.Mvc将应用程序分离为三个部分: Model:是一组类,用来描述被处理的数据,同时也定义这些数据如何被变更和操作的业务规则.与数 ...
- 【Linux Tips】登陆,提示符,别名
1.Linux 的tty界面下的登陆界面设置 看了半天发现,原来每次ctrl+alt+F1进入的tty1刚开始显示的就是初始化的登陆界面,顿时有种想装扮下他的冲动,因为实在是太简单了点,不过我是个喜欢 ...
- VS2003"无法启动调试 没有正确安装调试器"的解决方法
在用VS2003做项目的时候,经常调试程序,但是有时候回出现如下问题“无法启动调试,没有正确安装调试器,请运行安装程序或修复调试器”.第一次碰到还以为是运气不好,就重新用vs2003安装程序重新修复了 ...
- Unity C#集合
集合分为两种:非泛型集合,泛型集合. 非泛型集合需要引入:System.Collections命名空间,其命名空间下的类有: ArrayList表示大小根据需要动态增加的对象数组. Hashtable ...
- MySQL中字符串与数字比较的坑
公司项目代码中,某枚举字段数据库表中类型是char(1),在代码中,误以为是TINYINT,所以用数字筛选,后来发现结果不对.发现了一个现象,用数字0筛选会把所有的记录给筛选出来. 经过排查发现是在M ...