zoukankan      html  css  js  c++  java
  • MongoDB 基础知识 (一)

    一、Mongo的常用命令

    1、配置的基础命令

    (1)创建用户 

    db.createUser({ 
        user: 'root', 
        pwd: 'root', 
        roles: [ "root" ] 
    });

    (2)查看所有用户信息  show users 

     (3)查看当前的所有数据库  show databases 

    (4)查看当前的数据库   db 

     (5)切换数据库, 格式:use {数据库名}

    2、插入数据

    db.集合.insertOne(<JSON对象>) // 添加单个文档
    db.集合.insertMany([{<JSON对象1>},{<JSON对象2>}]) // 批量添加文档
    db.集合.insert() // 添加单个文档

    insertOne, 和 insertMany命令不支持 explain命令;insert支持 explain命令;

    插入文档时,如果没有显示指定主键,MongoDB将默认创建一个主键,字段固定为 _id。

    (1)插入单条数据,格式

    db.{集合名}.insertOne(
      doc,
      {
        writeConcern: 安全级别 // 可选字段
      }
    )

     <1> writeConcern 定义了本次文档创建操作的安全写级别,决定一个写操作落到多少个节点上才算成功。 writeConcern的取值包括:

        0: 发起写操作,不关心是否成功;
        1-: 集群中最大数据节点数,写操作需要被复制到指定节点数才算成功;
        majority: 写操作需要被复制到大多数节点上才算成功;
    发起写操作的程序将阻塞到写操作到达指定的节点数为止;

    例如:

    db.members.insertOne({
        name : "zhangsan",
        age: 12,
        sex : "m"
    })

    -

    <2> 插入文档时,如果没有显示指定主键,MongoDB将默认创建一个主键,字段固定为_id, ObjectId() 可以快速生成的12字节id 作为主键,ObjectId 前四个字节代表了主键生成的时间,精确到秒。主键ID在客户端驱动生成,一定程度上代表了顺序性,但不保证顺序性, 可以通过ObjectId("id值").getTimestamp() 获取创建时间。

     

     getTimestamp() 获取到的创建时间为0时区的,转为北京时间需要增加8小时。

    (2)插入多条数据,格式

    db.{集合名}.insertMany(
      [ {doc } , {doc }, ....],
      {
        writeConcern: doc,
        ordered: true/false
      }
    )

    ordered:  觉得是否按顺序进行写入;

    顺序写入时,一旦遇到错误,便会退出,剩余的文档无论正确与否,都不会写入;
    乱序写入时,则只要文档可以正确写入就会正确写入,不管前面的文档是否是错误的文档;

    例如:

    db.members.insertMany([
        { name: "lisi", age: 25, status: "A", tags: [ "blank", "red" ] },
        { name: "wangwu", age: 50, status: "A", tags: [ "red", "blank" ] }
      ],
      {
        ordered: true
      }
    );

     

    3、查询数据

    格式:

    db.{集合名}.find({})               查询所有的文档 
    db.{集合名}.find({}).pretty()      返回格式化后的文档

     先插入数据

    db.inventory.insertMany([
      { item: "journal", qty: 25, status: "A", size: { h: 14, w: 21, uom: "cm" }, tags: [ "blank", "red" ] },
      { item: "notebook", qty: 50, status: "A", size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank" ] },
      { item: "paper", qty: 10, status: "D", size: { h: 8.5, w: 11, uom: "in" }, tags:[ "red", "blank", "plain" ] },
      { item: "planner", qty: 0, status: "D", size: { h: 22.85, w: 30, uom: "cm" }, tags: [ "blank", "red" ] },
      { item: "postcard", qty: 45, status: "A", size: { h: 10, w: 15.25, uom: "cm" }, tags: [ "blue" ] }
     ]);

    (1)精确查询

    // 查询inventory集合中,status为"D"的文档
    db.inventory.find( { status: "D" } )          
    
    // 查询inventory集合中,qty为0的文档
    db.inventory.find( { qty: 0 } )           

    (2)多条件查询

    // 查询inventory集合中,qty为并且status值为"D"的文档
    db.inventory.find( { qty: 0, status: "D" } );

    (3)嵌套对象精准查询

    // 查询inventory集合中,size对象中的uom属性为"in"的文档
    db.inventory.find( { "size.uom": "in" } );

     (4)返回指定字段

    // 查询inventory集合中的所有数据, 只返回item, status字段
    db.inventory.find({ }, { item: 1, status: 1 } );

    默认会返回_id 字段, 同样可以通过指定 _id:0 来不返回_id 字段;1 ----表示返回结果中包含指定属性字段; 0 ---表示返回结果中不包含指定属性字段;

    注意:指定字段返回,要么全部指定为1,要么全部指定为0;(即要么全部指定为返回哪些字段,要么全部指定为不返回哪些字段)

     (5)条件查询 and 

    // 查询inventory集合中,qty为45,并且status为"A"的文档
    db.inventory.find({$and:[{qty:45},{status:"A"}]}); 

      (6)条件查询 or

    // 查询inventory集合中,qty为10,或者status为"A"的文档
    db.inventory.find({$or:[{qty:10},{status:"A"}]})

     Mongo查询条件和SQL查询对照表

     

  • 相关阅读:
    Thread
    C# Iterations: IEnumerator, IEnumerable and Yield
    基于SharePoint 2010 创建一个简单的工作流
    利用with关键字实现数据查询的递归调用
    编写JQuery插件示例
    生成密码web小工具
    (转)关于SQL Server 中合并行的方法
    html5做的割绳子游戏
    SharePoint Foundation和SharePoint Server的区别
    如何实现基于AD的MOSS的FORM认证方式
  • 原文地址:https://www.cnblogs.com/yufeng218/p/15426766.html
Copyright © 2011-2022 走看看