MongoDb 使用

mongo 与MySQL的简单概念对比

MongoDB 以 BSON 结构(二进制)进行存储

MongoDB 的所有数据实际上是存放在硬盘的,所有要操作的数据通过 mmap 的方式映射到内存某个区域内

MongoDB 在内存中修改了数据后,mmap 数据flush到硬盘之前,系统宕机了,数据就会丢失。

存储方式:虚拟内存+持久化

mmap 系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用。 read(),write()等操作。

mmap 并不分配空间, 只是将文件映射到调用进程的地址空间里, 然后你就可以用 memcpy 等操作写文件, 而不用 write() 了.写完后用 msync() 同步一下, 你所写的内容就保存到文件里了. 不过这种方式没办法增加文件的长度, 因为要映射的长度在调用 mmap() 的时候就决定了。

mongomysql
数据库数据库
集合
文档行(记录)

数据库操作

  • 使用数据库mongo_demo,如果不存在则创建数据库
use mongo_demo

db.mongo_demo.insert({"name":"suvii","age":22})
创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建 

下面的db,其实都可以理解为当前数据库的一个实例

  • 查看当前数据库:
db
  • 查看所有数据库:
show dbs

删除数据库

db.dropDatabase()  删除当前数据库,默认为test   

集合操作:

  • 创建集合:

创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。

db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
也可无需创建集合,在插入文档时会自动创建指定集合:
db.log.insert({"name":"科比","what":"起床训练","where":"洛杉矶","when":"凌晨4点"})
  • 删除集合:
db.collectionName.drop()

文档操作

所有文档的数据结构基本和json一样,存储在集合中的数据都是BSON (Binary JSON)

  • 插入文档

log 是集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。

db.COLLECTION_NAME.insert(document)

db.log.insert({"name":"科比","what":"起床训练","where":"洛杉矶","when":"凌晨4点"})
  • 查看已插入文档:
db.log.find()
  • 更新文档
db.log.save(
   <document>,
   {
     writeConcern: <document>      //可选,抛出异常的级别。
   }
)

如果指定 _id字段,save方法会更新指定_id文档,否则为新增文档

db.collection.update(
   <query>,          //update的查询条件,类似sql update查询内where后面的。
   <update>,         // update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
   {
     upsert: <boolean>,       //可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

     multi: <boolean>,        //可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
     writeConcern: <document>  //可选,抛出异常的级别。
   }
)
db.log.update({"name":'科比'},{$set:{'what':'训练变强'}})

db.log.update({"name":'科比'},{$set:{'what':'训练变强'},{multi:true}})  //设置 multi 参数为 true,会修改多条匹配到的数据
  • 删除文档
 db.log.deleteOne({'name':'bob'})  //删除匹配的一个文档
 db.log.deleteMany({'name':'bob'})  //删除匹配的全部文档
db.log.remove({})  //删除所有文档
  • 查询文档

db.collection.find(query, projection) , projection指定返回的键名

db.log.find({'price':{$lt:168} })       //$gt:大于,  $lte:<=小于或等于   $ne:不等于

db.log.find({'price':{$lt:168}, 'name':'洗衣粉'})   //,分开 相当于and条件 
db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
)   //OR条件

db.collection.find({}, {name: 1, age: 1})  //筛选显示的键  

db.log.find({time:/凌晨/})       //模糊查询 when包含‘凌晨’的 
db.log.find({when:/^凌晨/})     //模糊查询 when包含‘凌晨’开头的
db.log.find({when:/凌晨$/})    //模糊查询 when包含‘凌晨’结尾的 


db.log.find({'price':{$lt:168}).limit(10).sort({age:1})   //sort排序,1 --> 升序, -1 --> 降序


索引

待更新…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值