前言

  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. [.NET] 一步步打造一个简单的 MVC 网站 - BooksStore(一)

    一步步打造一个简单的 MVC 网站 - BooksStore(一) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore 简介 主 ...

  2. Mesos+Zookeeper+Marathon+Docker分布式集群管理最佳实践

    参考赵班长的unixhot以及马亮blog 笔者QQ:572891887 Linux架构交流群:471443208 1.1Mesos简介 Mesos是Apache下的开源分布式资源管理框架,它被称为分 ...

  3. Python之路-Linux命令基础(5)

    作业一:nginx服务 二进制安装nginx包 1.使用网络yum源 2.使用yum安装epel-release扩展源 [root@localhost html]# yum install epel- ...

  4. Linux文件管理下

    文件操作 对于文件,我们可以读取(read),写入(write)和运行(execute).读取是从已经存在的文件中获得数据.写入是向新的文件或者旧的文件写入数据.如果文件储存的是可执行的二进制码,那么 ...

  5. JAVA加密算法系列-BASE64

    package ***; import java.io.IOException; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encode ...

  6. mysql 主从同步 实现增量备份

    数据库复制 replication 的实现原理 1:主服务器凡运行语句,都产生一个二进制日志 binlog 2:从服务器不断读取主服务器的binlog 3:从主服务读取到的binlog,转换为自身可执 ...

  7. 编译MangosZero

    最近研究了一下魔兽世界模拟器MangosZero,花了两天时间终于编译成功!现在把编译的过程做个完整的记录,以便让想要学习编译的同学们少走弯路! 服务器端运行界面: 客户端运行界面: 一:下载源程序 ...

  8. ADO.NET 参数化查询

    参数化查询 使用参数化查询的情景有很多,但最常用的情景是需要用户在查询中进行输入的情况. 有两种方法可供使用.第一,可以讲用户输入嵌入到查询字符串中,例如可能使用.NET Framework中的Str ...

  9. 使用Java语言开发微信公众平台(五)——获取access_token

    在前四期的文章中,我们分别学习了"环境搭建与开发接入"."文本消息的接收与响应"."被关注回复与关键词回复"."图文消息的发送与响 ...

  10. lib-flexble 使用遇到的bug及解决方案

    1 lib-flexble解决微信端长按不能弹出识别二维码功能 加viewport就完美解决  flexble可以自动完成 一般情况不建议加 但是么 bug出来了  加上就好了 2 Font Boos ...