• MongoDB入门,安装配置与基本CURD操作


    MongoDB特点

    MongoDB是NoSQL的一种,非关系型数据库,或者叫不只是关系型数据库(Not Only SQL)。MongoDB采用json格式的文档存储,与Redis的key-value有区别。每个json文档(每行)的结构可能是一样的,因此可以实现关系型数据库的部分功能,比如建立索引,条件查询。下面是基本概念对比

    SQL NoSQL
    MySQL MongoDB
    database database
    table collection
    row document

    MongoDB 安装与配置

    • 安装略
    • 启动服务端
    • 启动客户端连接
    • 配置用户
      MongoDB默认创建了几个库(db/schema),admin,config,local,test等。admin主要用来存储用户权限表。通过
    db.createUser({user:'username', pwd:'userpass', roles:[{role:'readWrite', db:'test'}]})
    

    来创建用户和赋予权限。普通db的用户权限有read, readWrite, dbAdmin, userAdmin.分别表示读,读写,db管理,用户管理。每个db可以有独立的用户权限表。
    admin库的用户拥有更多角色权限。通常用来管理全局数据库的权限,root, readWriteAnyDatabase 等
    认证用户之前需要选择用户创建的时候指定的库,比如上面的username

    > use test
    test
    > db.auth('username', 'userpass')
    1
    

    MongoDB 增删改查

    MongoDB的集合collection(table)一般不需要创建可以直接使用。

    > use test
    test
    > db.newCollection.insert({name:'dapianzi', say:'hello world'})
    

    MongoDB 有一种固定大小的集合,通常用来存储日志,超过大小限制之后会从头开始覆盖写入。这种集合需要显式创建

    > db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
    { "ok" : 1 }
    >
    

    collection的名字可以包含空格和-,可以使用保留字。但是在shell中无法使用db.collectionName的形式,需要用db.getCollection:

    db.getCollection("3 test").find()
    db.getCollection("3-test").find()
    db.getCollection("stats").find()
    
    • Insert 操作
      其他方法比如update,save,findAndUpdate 通过设置 {upsert: true} 也可以插入新数据
        db.collection.insert({document:"document1"})
        db.collection.insertOne({document:"document2"})
        db.collection.insertMany([{document:"document3"},{document:"document4"}])
    
    • update / save
    • delete
    • query -- db.collection.find(option)
      @see Query Documents — MongoDB Manual 3.6
      MongoDB通过组合json查询条件实现不同查询需求, 常用的有 $or, $gt, $in, $gte 等,支持正则表达式查询。
    db.collection.find({name:/^w/})
    //相当于
    SELECT * FROM table WHERE name LIKE 'w%'
    

    如果文档内容是嵌入的文档(json),可以通过下面两种方式查询:

    db.collection.find({item: {subKey: 'a', subName:'b'}})
    db.collection.find({'item.subKey':'a', 'item.subName':'b'})
    

    查询数组列表有几个模式比较特别:

    db.inventory.find( { tags: ["red", "blank"] } ) 数组tags等于["red","blank"]

    db.inventory.find( { tags: { $all: ["red", "blank"] } } ) 数组包含red和blank,不限顺序和是否还有其他元素

    db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } ) 数组里存在元素x>15,同时存在元素y<20的元素

    db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } ) 至少存在一个元素x同时满足15<x<20

    MongoDB 主从复制,分布式架构

    MongoDB支持多种架构,从简单的主备复制,到分布式存储都有成熟的体系可以直接应用。可以简单了解一下,遇到需要应用的场景时再仔细研究。

    MongoDB的初步学习暂时就到这里,下一篇将重点学习MongoDB的聚合查询,全文索引等。

  • 相关阅读:
    mysql数据库的test类型
    jvm虚拟机分享课笔记
    内存模型中没有gc的是哪个
    jvm内存模型中-栈,方法区,程序计数器是线程安全的
    Random.nextInt()替换Math.random()
    异常抛出注意点
    缓存好文章
    java 实现serialVersionUID
    什么叫反向代理什么叫正向代理
    mysql count与sum的区别
  • 原文地址:https://www.cnblogs.com/dapianzi/p/8985860.html
Copyright © 2020-2023  润新知