zoukankan      html  css  js  c++  java
  • MongoDB知识小结

    一、术语

    RDBMS MongoDB
    数据库 数据库
    表格 集合
    文档
    字段
    表联合 嵌套文档
    主键 主键 (MongoDB 提供了 key 为 _id )

    数据库

    数据库名可以是满足以下条件的任意UTF-8字符串。

    • 不能是空字符串("")。
    • 不得含有' '(空格)、.、$、/、和 (空字符)。
    • 应全部小写。
    • 最多64字节。

    有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库

    • admin
    • local
    • config

    集合

    集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
    集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
    当第一个文档插入时,集合就会被创建。
    合法的集合名

    • 集合名不能是空字符串""。
    • 集合名不能含有字符(空字符),这个字符表示集合名的结尾。
    • 集合名不能以"system."开头,这是为系统集合保留的前缀。
    • 用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。

    文档

    文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
    需要注意的是:

    • 文档中的键/值对是有序的。
    • 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
    • MongoDB区分类型和大小写。
    • MongoDB的文档不能有重复的键。
    • 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

    文档键命名规范:

    • 键不能含有 (空字符)。这个字符用来表示键的结尾。
    • .和$有特别的意义,只有在特定环境下才能使用。
    • 以下划线"_"开头的键是保留的(不是严格要求的)。

    字段

    二、常用命令

    1. 连接数据库

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

    实例
    连接本地数据库服务器,端口是默认的。。

    mongodb://localhost
    

    使用用户名fred,密码foobar登录localhost的admin数据库。

    mongodb://fred:foobar@localhost
    

    使用用户名fred,密码foobar登录localhost的baz数据库

    mongodb://fred:foobar@localhost/baz
    

    其它...

    2. 查看所有数据库

    show dbs
    

    3. 查看当前数据库

    db
    

    4. 创建数据库、连接到指定数据库use database 如果数据库不存在。

    use xxx
    

    5. 删除数据库

    先用use xxx到指定数据库xxx,然后再执行删除命令db.dropDatabase()。

    db.dropDatabase()
    

    6. 查看已有集合

    show collections
    

    7. 创建集合

    db.createCollection(name, options)
    

    实例

    db.createCollection("col")
    

    在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合

    db.mycol2.insert({"name" : "菜鸟教程"})
    

    注意: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

    8.删除集合

    db.collection.drop()
    

    实例

    db.mycol2.drop()
    

    9.查看文档

    find()查看文档,除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。

    db.COLLECTION_NAME.find()
    

    条件运算符

    操作 格式 范例
    等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty()
    小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty()
    小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty()
    大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty()
    大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty()
    不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty()

    AND 条件和OR 条件

    MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。

    db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"})
    

    MongoDB OR 条件语句使用了关键字 $or,语法格式如下

    db.col.find(
       {
          $or: [
             {key1: value1}, {key2:value2}
          ]
       }
    )
    

    实例

    db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
    

    $type

    $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

    db.col.find({"title" : {$type : 'string'}})
    

    Limit与Skip方法

    limit()方法基本语法如下所示:

    db.COLLECTION_NAME.find().limit(NUMBER)
    

    除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数

    db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
    

    10.插入文档

    insert() 或 save() 方法向集合中插入文档,语法如下:

    db.COLLECTION_NAME.insert(document)
    

    实例

    db.col.insert({mycol: 'MongoDB 教程', 
        description: 'MongoDB 是一个 Nosql 数据库',
        by: '菜鸟教程',
        url: 'http://www.runoob.com',
        tags: ['mongodb', 'database', 'NoSQL'],
        likes: 100
    })
    

    插入文档也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。

    11.更新文档

    update() 和 save() 方法来更新集合中的文档。
    update() 方法用于更新已存在的文档。语法格式如下:

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

    参数说明:

    • query : update的查询条件,类似sql update查询内where后面的。
    • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    • writeConcern :可选,抛出异常的级别

    实例
    通过 update() 方法来更新标题(title)

    db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
    

    save() 方法通过传入的文档来替换已有文档。语法格式如下

    db.collection.save(
       <document>,
       {
         writeConcern: <document>
       }
    )
    

    实例
    以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:

    db.col.save({
        "_id" : ObjectId("56064f89ade2f21f36b03136"),
        "title" : "MongoDB",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "Runoob",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "NoSQL"
        ],
        "likes" : 110
    })
    

    12.删除文档

    remove()函数是用来移除集合中的数据。语法格式如下:

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

    参数说明:

    • query :(可选)删除的文档的条件。
    • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
    • writeConcern :(可选)抛出异常的级别。
      实例
    db.col.remove({'title':'MongoDB 教程'})
    
  • 相关阅读:
    Java面试——从JVM角度比较equals和==的区别
    Java线程和多线程(三)——线程安全和同步
    玩转Android之MVVM开发模式实战,炫酷的DataBinding!
    写点什么好呢2? 钱、事业、婚姻、人生意义
    写点什么好呢2? 钱、事业、婚姻、人生意义
    大型网站架构技术一览
    【树莓派】GSM900模块
    【Latex】数学公式排版
    【MYSQL】导入中文后乱码问题
    【R】shiny界面
  • 原文地址:https://www.cnblogs.com/superlizhao/p/12030729.html
Copyright © 2011-2022 走看看