zoukankan      html  css  js  c++  java
  • 【MongoDB学习之二】MongoDB数据库、文档、集合、元数据

    环境
      MongoDB 4.0
      CentOS6.5_x64

    一、连接
    语法格式:

    mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

    参考:MongoDB 连接

    二、数据库

    1、show dbs:命令可以显示所有数据的列表
    2、db:命令可以显示当前数据库对象或集合。
    3、use:如果数据库不存在,则创建数据库,否则切换到指定数据库。

    4、db.dropDatabase() 删除当前数据库

    [root@node102 bin]# ./mongo
    ...
    > show dbs
    admin 0.000GB
    config 0.000GB
    local 0.000GB
    > db
    test
    > use admin
    switched to db admin
    > db
    admin
    > use wjy
    switched to db wjy
    > db
    wjy

    保留数据库:

    admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
    local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
    config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

    三、集合

    1、查询当前数据库中所有的集合(表) 

    show collections 

    2、显式创建collection: 

    db.createCollection(‘collectionName’) 

    3、隐式创建collection(插入数据前创建): 

    db.collectionName.insert(document); 

    4、删除collection: 

    db.collectionName.drop() , 

    5、统计Collection中文档数量: 

    db.collectionName.count();

    > use test
    switched to db test
    > db
    test
    > show collections
    > db.createCollection('cols')
    { "ok" : 1 }
    > show collections
    cols
    > db.cols.insert({title: 'MongoDB 教程', 
    ...     description: 'MongoDB 是一个 Nosql 数据库',
    ...     by: 'w3cschool',
    ...     url: 'http://www.w3cschool.cn',
    ...     tags: ['mongodb', 'database', 'NoSQL'],
    ...     likes: 100
    ... })
    WriteResult({ "nInserted" : 1 })
    > db.cols.count()
    1
    > db.cols.drop()
    true
    > show collections
    >

    四、文档

    1、新增

    (1)增加单个文档。

    > db.user.insert({name:"will",age:17});
    WriteResult({ "nInserted" : 1 })
    > show collections
    user

    (2)增加单个文档,并指定_id。 

    > db.user.insert({_id:22,name:"will",age:17,gender:"boy",email:"will@itsource.cn"});
    WriteResult({ "nInserted" : 1 })

    (3)增加多个文档。

    > db.user.insert([
    ... {name:"张三",age:17},
    ... {name:"李四",age:18},
    ... {name:"王五",age:19}
    ... ])
    BulkWriteResult({
        "writeErrors" : [ ],
        "writeConcernErrors" : [ ],
        "nInserted" : 3,
        "nUpserted" : 0,
        "nMatched" : 0,
        "nModified" : 0,
        "nRemoved" : 0,
        "upserted" : [ ]
    })
    > db.user.count()
    5
    >

    注意:db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据

    2、更新操作

    语法: 

    db.collection.update(
       <criteria>,
       <objNew>,
       {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
       }
    )

    criteria : update的查询条件,类似sql update查询内where后面的。

    objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

    upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

    multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新 

    writeConcern :可选,抛出异常的级别。

    (1)只更新第一条记录:

    db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

    (2)全部更新:

    db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

    (3)只添加第一条:

    db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

    (4)全部添加进去:

    db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

    3、删除操作

    语法: 

    db.collection.remove(
       <query>,
       {
         justOne: <boolean>,
         writeConcern: <document>
       }
    )

    query :(可选)删除的文档的条件。

    justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

    writeConcern :(可选)抛出异常的级别。

    (1)删除user集合中_id属性值为9527的文档 。

    db.user.remove({_id:9527}); 

    (2)删除user集合中gender属性为boy的文档(默认删除多条数据)。

    db.user.remove({gender:"boy"}); 

    (4)删除user集合中gender属性为girl的文档,只删除1行。

    db.user.remove({gender:"boy"},true);

    (4)清空所有,类似truncate

    db.user.remove({})

    4、查询操作

    语法: 

    db.collection.find(query, projection)

    query :可选,使用查询操作符指定查询条件

    projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

    db.col.find().pretty():pretty() 方法以格式化的方式来显示所有文档。

    (1)查询所有user集合中文档的数据。 

    db.user.find();

    (2)查询user集合中所有的gender属性 (_id属性默认总是查出来)。 

    db.user.find({},{gender:true});

    (3)查询user集合中所有的gender属性,且不查询_id属性。 

    db.user.find({},{_id:false,gender:true});

    (4)查询user集合中所有gender属性值为boy的文档中的name属性。 

    db.user.find({gender:"boy"},{_id:false,name:true});

    (5)查询user集合中所有gender属性值为boy并且年龄大于等于17的文档中的name属性。

    db.user.find({gender:"boy",age:{$gte:17}},{_id:false,name:true,age:true});

    官方最新版本增删改查操作文档

    五、元数据

    1、系统的命名空间
    数据库的信息是存储在集合中。它们使用了系统的命名空间:dbname.system.*
    在MongoDB数据库中名字空间 <dbname>.system.* 是包含多种系统信息的特殊集合(Collection),如下:
    集合命名空间 描述
    dbname.system.namespaces 列出所有名字空间。
    dbname.system.indexes 列出所有索引。
    dbname.system.profile 包含数据库概要(profile)信息。
    dbname.system.users 列出所有可访问数据库的用户。
    dbname.local.sources 包含复制对端(slave)的服务器信息和状态。
    对于修改系统集合中的对象有如下限制。
    在{{system.indexes}}插入数据,可以创建索引。但除此之外该表信息是不可变的(特殊的drop index命令将自动更新相关信息)。
    {{system.users}}是可修改的。 {{system.profile}}是可删除的。

    2、MongoDB 数据类型
    String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
    Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
    Boolean 布尔值。用于存储布尔值(真/假)。
    Double 双精度浮点值。用于存储浮点值。
    Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
    Array 用于将数组或列表或多个值存储为一个键。
    Timestamp 时间戳。记录文档修改或添加的具体时间。
    Object 用于内嵌文档。
    Null 用于创建空值。
    Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
    Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
    Object ID 对象 ID。用于创建文档的 ID。
    Binary Data 二进制数据。用于存储二进制数据。
    Code 代码类型。用于在文档中存储 JavaScript 代码。
    Regular expression 正则表达式类型。用于存储正则表达式。

    六、MongoDB客户端工具-MongoVUE

    MongoVUE下载

    MongoVUE使用

    其他常用的MongoDB客户端管理工具

    清单一

    清单二

  • 相关阅读:
    什么是API
    理解RESTful架构
    SDN的深入思考(1):SDN的核心本质到底是什么?
    SDN-数据控制分离
    浅析html+css+javascript之间的关系与作用
    python调用win32接口进行截图
    解决tensorflow问题:Your CPU supports instructions that this TensorFlow binary was not compiled to use:
    去除警告: FutureWarning: In future, it will be treated as `np.float64 == np.dtype(float).type`.
    Anaconda清华大学开源镜像
    python控制windows剪贴板,向剪贴板中写入图片
  • 原文地址:https://www.cnblogs.com/cac2020/p/11328053.html
Copyright © 2011-2022 走看看