MongoDB入门理解

      MongoDB中,一个数据库包含多个集合(类似关系型数据库的表),一个集合包含多个文档(类似关系型数据库的一行记录),文档存储方式是类JSON的BSON存储数据,BSON可以理解为在JSON格式上添加了一些JSON没有的数据类型。

文档:

        两个文档之间有 嵌入式关系 和 引用式关系

集合:

        集合就是各种文档的集合,MongoDB的同一个集合可以存储不同结构的多个文档,例如:

{"company":"Chenshi keji"} {"people":"man","name":"peter"}

元数据

数据库的信息存储在集合中,他们统一使用系统的命名空间:DBNAME.system.* DBNAME 可用 db 或数据库名替代

  • DBNAME.system.namespaces :列出所有名字空间
  • DBNAME.system.indexs :列出所有索引
  • DBNAME.system.profile :列出数据库概要信息
  • DBNAME.system.users :列出访问数据库的用户
  • DBNAME.system.sources :列出服务器信息

数据库操作:

  1. show dbs 查看所有数据库
  2. db 查看当前的数据库对象或者集合
  3. use dbName 连接到dbName数据库

集合的操作:

  • 创建集合    
db.createCollection("users")   //无参
db.createCollection("shiyanlou2", { capped : 1, autoIndexID : 1, size : 6142800, max : 10000 } )  

参数描述:

  • capped:类型为 Boolean,如果为 true 则创建一个固定大小的集合,当其条目达到最大时可以自动覆盖以前的条目。在设置其为 true 时也要指定参数大小;
  • autoIndexID:类型为 Boolean,默认为 false,如果设置为 true,则会在 _id field.s 上自动创建索引;
  • size:如果 capped 为 true 需要指定,指定参数的最大值,单位为 byte;
  • max:指定最大的文档数。 在 Mongodb 中也可以不用创建集合,因为在创建文档的时候也会自动的创建集合。
  • 查看集合
show collections
  • 删除集合
db.users.drop

文档的操作:

  • 数据的插入
insert()

db.users.insert([

... { name : "jam",

... email : "jam@qq.com"... },

... { name : "tom",

... email : "tom@qq.com"... }

... ])

        save()

db.users.save([

... { name : "jam",

... email : "jam@qq.com"... },

... { name : "tom",

... email : "tom@qq.com"... }

... ])
  • 数据的查询

        查询整个集合

db.users.find()             

db.users.find().pretty()   //更美观的显示方式

        and查询

db.users.find({ key1: value1, key2: value2 }).pretty()  

        or查询

db.users.find(

{

    $or: [

        {key1: value1},

        {key2: value2}

        ]

    }

).pretty()

    同时使用and和or

db.post.find({

    "number": {$gt:10},

    $or: [

        {"by": "shiyanlou"},

        {"title": "MongoDB Overview"}

        ]

}).pretty()

    {$gt:10} 表示大于10,另外,$lt 表示小于,$lte 表示小于等于,$gte 表示大于等于,$ne 表示不等于

  • 数据的更新
db.shiyanlou.update({"user_id":2,"e-mail":"test@qq.com"},{$set:{"e-mail":"group@qq.com"}})
  • 将 user_id=2 的文档的 e-mail 改为 group@qq.com
  • 第一个大括号内容标示查找条件,第二个大括号内容则表示更新后的数据
  • 默认的 update 函数只对一个文档更新,如果想作用所有文档,则需要加入 multi:true
  • 替换已存在的数据
db.shiyanlou.save({"_id":ObjectId("53ea174ccb4c62646d9544f4"),"name":"Bob","position":"techer"})

       _id 对应的是要替换文档的 _id

  • 删除数据
db.shiyanlou.remove({"name":"Bob"})
  • 条件操作符
  • 双精度型-1
  • 字符串-2
  • 对象-3
  • 数组-4
  • 二进制数据-5
  • 对象ID-7
  • 布尔类型-8
  • 数据-9
  • 空-10
  • 正则表达式-11
  • JS代码-13
  • 符号-14
  • 有作用域的JS代码-15
  • 32位整型数-16
  • 时间戳-17
  • 64位整型数-18
  • Min key-255
  • Max key-127

db.shiyanlou.find({"name":{$type:2}})

查找name是字符串的文档记录。

  • limit与skip
db.shiyanlou.find().limit(1)    //读取一条记录,默认是排在最前面的那条被读取

db.shiyanlou.find().limit(1).skip(1)       //读取时跳过指定数量的记录
  • sort()
db.COLLECTION_NAME.find().sort({KEY:1|-1})     //升序1 降序-1

例如:

db.shiyanlou.find().sort({"time":1}
  • 索引ensureIndex()

索引是特殊的数据结构,存储在容易遍历读取的数据集合里,是对数据库集合中的一个或者多个文档的值进行排序的一种结构。

db.COLLECTION_NAME.ensureIndex({KEY:1|-1})       //升序1 降序-1

例如:

db.shiyanlou.ensureIndex({"name":1})
  • 查询分析

     explain()显示查询的详细元数据

db.users.find({gender:"M"},{user_name:1,_id:0}).explain()

      结果中字段解释:

  • indexOnly:为 true ,表示我们使用了索引;
  • cursor:因为这个查询使用了索引,MongoDB 中索引存储在 B 树结构中,所以这是也使用了 BtreeCursor 类型的游标。如果没有使用索引,游标的类型是 BasicCursor。这个键还会给出你所使用的索引的名称,你通过这个名称可以查看当前数据库下的 system.indexes 集合(系统自动创建)来得到索引的详细信息;
  • n:当前查询返回的文档数量;
  • nscanned/nscannedObjects:表明当前这次查询一共扫描了集合中多少个文档,我们的目的是,让这个数值和返回文档的数量越接近越好;
  • millis:当前查询所需时间,毫秒数;
  • indexBounds:当前查询具体使用的索引。
原文地址:https://www.cnblogs.com/lingqinyu/p/8877754.html