mongodb学习笔记

MongoDB

数据库

  1. 关系型数据库(RDBMS):mysql , oracle, db2, sql server

    • 关系数据库中全是表
  2. 非关系型数据库(NoSQL):MongoDB、redis

    • 键值对数据库(redis)
    • 文档数据库(MongoDB)

简介

  • MongoDB的数据模型是面向文档的,所谓文档就是类似于JSON的结构,MongoDB中存的就是各式各样的JSON(BSON)。

安装

mongodb安装

  • 可以配置开机自启动,菜鸟教程

基本概念

  • 数据库(database)

  • 集合(collection) == 表

  • 文档(document) == 记录(元组)

    • 数据库>集合> 文档
    • 在MongoDB中,数据库和集合都不需要手动创建
    • 当我们创建文档时,如果文档所在的集合或数据库不存在,会自动创建

基本指令

  • show dbs == show databases
  • use 数据库名
  • db : 显示当前所在的数据库
  • show collections : 显示数据库中的所有集合

CRUD操作

  • 插入文档

    • db.集合名称.insert(文档对象)

      • 向集合中插入一个或多个文档

      • 当像集合中插入文档时没有给文档指定id,数据库会自动生成一个,该属性用来做唯一标识,id 也可以自己指定但要唯一。

      • 例子:向test数据库中的stus集合插入一个新的学生对象

        {name:"zhangsan",age:10,gender:"male"}

        db.stus.insert({name:"zhangsan",age:10,gender:"male"})

      • 插入多个对象

        db.stus.insert([
        	{name:"lisi", age:"12", gender:"female"},
        	{name:"王五", age:"15", gender:"male"}])
        
    • db.集合名称.insertOne(文档对象)

      • 只能插入一个文档对象。
    • db.集合名称.insertMany(文档对象)

      • 只能插入多个文档对象。
      • 这样做更清晰。
  • 查询文档

    • db.集合名称.find()

      • 查询当前集合的所有文档

      • 可以接受一个对象作为条件参数

        • {}: 表示查询集合中所有文档
        • {属性:值}: 查询指定属性值的文档
      • find() 返回的是一个数组

        db.stus.find({name:"lisi"})
        
    • db.集合名称.findOne()

      • 查询集合中符合条件的第一个文档

      • findOne() 返回的时一个文档对象

        db.stus.findOne({name:"zhangsan"})
        
    • db.集合名称.find({}).count()

    • 查询所有结果的数量

  • 修改文档

    • db.集合名称.update(查询条件,新对象,属性可以没有 )

      • update() 默认情况下使用新对象替换旧对象

      • 如果需要修改指定的属性,而不是替换需要使用"修改操作符"来完成

        • $set 可以用来修改文档中的指定属性
        • $unset 可以用来删除文档的指定属性
      • update() 默认只会修改一个

      • 属性可以指定multi为true,这样就可以修改多个对象

    • db.集合名称.updateMany()

      • 同时修改多个符合条件的文档
    • db.collection.updateOne()

      • 修改一个符合条件的文档

        // 修改所有name为lisi的年龄为20
        db.stus.updateMany(
        	{name:"lisi"},  // 查询条件
        	{				// 新对象
        	    $set:{
        	        age:20
        	    }
        	}
        )
        
    • db.集合名称.replaceOne()

      • 替换
  • 删除文档

    • db.集合名称.remove()

      • 删除一个或多个,可以传第二个参数,若为true则只会删除一个
      • 如果传一个空对象则会删除全部
    • db.集合名称.deleteOne()

    • db.集合名称.deleteMany()

    • db.集合名称.drop() 删除集合

    • db.dropDatabase() 删除数据库

文档间的关系

  1. 一对一
  2. 一对多 多对一
  3. 多对多

可以通过内嵌文档的形式来体现

排序和投影

  • db.collection.find({}).sort({})

    sort()需要传递一个对象来指定排序规则 1表示升序,-1表示降序

  • db.collection.find({})

    find() 可以在第二个参数的位置来设置查询结果的 投影 (想要显示的列) 想显示的 1 不要显示的 0

posted @ 2019-12-03 22:59  冲个vip  阅读(121)  评论(0编辑  收藏  举报