前言

  1. mongodb是什么?, 需fq
  2. 如何安装mongodb?

数据库基本命令

  1. 显示所有数据库: show dbs

  2. 创建/使用数据库:use dbName

  3. 创建数据库表,在mongoDB里又将表称为集合(collections), 因此创建表:db.createCollection("collectionName")

  4. 显示数据库下的所有集合(表): show tables / show collections

  5. 删除当前数据库: db.dropDatabase()

  6. 查看当前所使用的数据库: db.getName()

  7. 显示当前数据库的状态: db.stats()

  8. 显示当前数据库的版本: db.version()

注意: collectiontable概念差不多,docrow概念差不多。

集合(表)命令

增加数据

  1. 创建一个集合: db.createCollection("tableName")

  2. 添加文档:

    ```

    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();

```

  1. 使用函数sort, limit, skip
  • 以uid进行排序: db.users.find().sort({ 'uid': 1 });
  • 限制查询结果返回的最大数目为10: db.users.find().limit(10);
  • 返回查询结果除了前20条的文档的其他文档: db.users.find().skip(20);
  1. 使用固定集合、自然顺序和$natural
  • 固定集合必须使用createCollection(), 以显示的方式创建: db.createCollection("users", {capped: true, size: 20480})
  • 因为固定集合的顺序和插入顺序是一样的, 如果想要逆转排序: db.users.find().sort({ $natural: -1 }).limit(10);
  1. 获取单个文档: db.users.findOne();

  2. 使用常用的聚合命令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,
      }
    ]
  1. 使用条件操作符
  • 执行大于和小于($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新手扫盲的更多相关文章

  1. mongodb新手入门,mongodb命令学习

    下面来总结一下mongodb新手入门的常用命令吧.要是您是mongodb新手,可以看下. 1,show dbs 查询mongodb里面的数据库列表 如果想查看当前连接在哪个数据库下面,可以直接输入db ...

  2. mongodb新人扫盲

    前言 数据库基本命令 集合(表)命令 增加数据 删除数据 更新数据 使用update()更新 使用save()命令实现upsert 自动更新信息 查询数据 mongoose的使用 前言 mongodb ...

  3. MongoDB 快速扫盲贴

    长话短说 经过996的历练,开发者潜意识里总是以object的视角看待事物, 现在某些数据库也具备这样的视角. MongoDB是一个文档型(类JSON 文档)数据库,相比传统的关系型row/colum ...

  4. Linux实战教学笔记05:远程SSH连接服务与基本排错(新手扫盲篇)

    第五节 远程SSH连接服务与基本排错 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 远程连接LInux系统管理 1.1 为什么要远程连接Linux系统 在实际的工作场景中,虚拟机界面或物理 ...

  5. Linux新手扫盲(转载)

    一. Linux特点 1.免费/开源: 2.支持多线程/多用户: 3.安全性好: 4.对内存和文件管理优越. Linux最小只需4M ——> 嵌入式开发 二. 文件目录 Linux系统所有软硬件 ...

  6. Linux新手扫盲

    一. Linux特点 1.免费/开源: 2.支持多线程/多用户: 3.安全性好: 4.对内存和文件管理优越. Linux最小只需4M ——> 嵌入式开发 二. 文件目录 Linux系统所有软硬件 ...

  7. X32,X64,X86 代表什意义

    X32,X64,X86是什么意思 各代表什么:X86指32位,X64指64位,现在用户最多的是XP,但win7是趋势,发展很快,建议你装个win7 32位的系统,下载的话地方很多,官方安装原版和gho ...

  8. Mac新手从入门到放弃MongoDB

    1. 简介 MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最 ...

  9. 新手立体四子棋AI教程(1)——基础扫盲

    一.引言 最近身边好几个朋友开始玩立体四子棋,激起了我的好奇心.那么首先来说什么是[立体四子棋],规则又是如何呢? 上图即为立体四子棋,规则类似于五子棋四子连在一起,但是四子棋更加多样.丰富.不仅可以 ...

随机推荐

  1. 【Java基础】 Java动态代理机制

    在Java的动态代理机制中,有两个重要的类.一个是InvocationHandler,另一个是Proxy. InvocationHandler:每一个动态代理类都必须要实现InvocationHand ...

  2. *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ViewController > setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key

    *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ViewController > ...

  3. H5与Android之间的交互

    关于Android与JS网页端的交互,网上有很多教程,刚做这功能,参考了多方资料,最终出来后觉得简单,但是为实现的话有诸多小问题,最终效果如下: 现在简单整理一下:(直接贴代码,注释详细,应该能懂的) ...

  4. 2.Java集合总结系列:List接口及其实现

    在介绍List接口之前,我们先来看看 Collection 接口,因为Collection接口是 List / Set / Queue 接口的父接口,List / Set / Queue 的实现类中很 ...

  5. AngularJS1.X学习笔记5-加强版的表单

    大家愚人节快乐!表单是沟通服务器端和客户端的桥梁,为数据从客户端传到服务端打开了一扇大门.AngularJS增加了一些新特性,使我们能够更加方便的操作表单.OK!开始学习!学习使我快乐. 一.双向数据 ...

  6. weex里Vuex state使用storage持久化

    在weex里使用Vuex作为state管理工具,问题来了,如何使得state可以持久化呢?weex官方提供store模块,因此我们可以尝试使用该模块来持久化state. 先看下该模块介绍: stora ...

  7. ios 网络/本地播放器

    推荐播放器: LRLAVPlayer相对易懂好修改,调整添加内容. https://github.com/codeWorm2015/videoPlayer NSString*path=[[NSBund ...

  8. Robot framework的介绍

    Robot framework是基于Python语言编写的功能自动化测试框架.使用简单,不懂编码的测试人员也能像编程一样写测试用例,支持关键字驱动测试并且可以开发系统关键字.还有丰富的第三方库,比如S ...

  9. java中创建对象中使用默认构造函数的注意点

    public class Test3 {   private int n;   Test3() {      System.out.println("调用默认构造器");   }  ...

  10. js解析器(重要!)

    JavaScript有"预解析"的特性,理解预解析是很重要的,不然在实际开发中可能会遇到很多无法解析的问题,甚至导致程序bug的存在. #js预解析执行过程: 预解析:(全局作用域 ...