mongodb新手扫盲

前言

  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大数据处理权威指南

上一篇:C#中经常使用的几种读取XML文件的方法


下一篇:RPA走专有云还是公共云?阿里云RPA公共云给出了这样几组数据…