MongoDB学习

概述

MongoDB 是一个基于分布式文件存储的NoSQL数据库

特点

  1. 模式自由 :可以把不同结构的文档存储在同一个数据库里、
  2. 面向集合的存储:适合存储 JSON风格文件的形式
  3. 完整的索引支持:对任何属性可索引
  4. 复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移
  5. 自动分片:支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器
  6. 丰富的查询:支持丰富的查询表达方式,查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组
  7. 快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划
  8. 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)

参考

MongoDB CRUD Operations

基本数据结构

MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成
MongoDB文档类似于JSON对象,字段值可以包含其他文档、数组、文档数组

与sql类比

sqlmongoDB
databasedatabase
tablecollection
rowdocument
columnfield
indexindex
table joins不支持
primary keyprimary key (_id字段)

操作

数据库

  1. use database_name 转到该数据库
  2. db 显示当前正在使用的数据库
  3. show dbs 显示所有有数据的数据库

基础语句

  1. db.collection.insert(document) 插入数据
>  db.user.insert( [
>  {
...     "name": "chenyurong",
...     "age": 25,
...     "addr": "ShenZhen"
... },
... {
...     "name": "LiQiLiang",
...     "age": 27,
...     "addr": "GuangZhou"
... }
... ])
  1. db.collection.find() 显示数据
> db.user.find()
{ "_id" : ObjectId("59a2782f6eb4c099dbb718a1"), "name" : "chenyurong", "age" : 25, "addr" : "ShenZhen" }
  1. db.collection.find() . pretty() 使输出格式化
>  db.user.find().pretty()
{
	"_id" : ObjectId("59abb034dca9453471d67f13"),
	"name" : "chenyurong",
	"age" : 25,
	"addr" : "ShenZhen"
}
  1. db.user.remove({ }) 清空当前数据库下user表的所有数据
> db.user.remove({ })
> WriteResult({ "nRemoved" : 2 })  显示删除的行数
  1. db.collection.find(query, projection)
    · query(可选): 使用查询操作符指定查询条件,该参数是一个JSON对象,key一般为查询的列名,value为查询匹配的值。
    · projection(可选):使用投影操作符指定返回的键。如果省略该参数,那么查询时返回文档中所有键值。该参数是一个JOSN对象,key为需要显示的列名,value为1(显示)或0(不显示)。
> db.user.find({"addr":"ShenZhen","age":25},{"_id":0}).pretty()
> { "name" : "ChenYuRong", "age" : 25, "addr" : "ShenZhen" }

范围操作符

操作格式范例RDBMS中的类似语句
等于{:}db.col.find({“by”:“MongoDb入门教程”}).pretty()where by = ‘MongoDb入门教程’
小于{:{$lt:}}db.col.find({“likes”:{$lt:50}}).pretty()where likes < 50
小于或等于{:{$lte:}db.col.find({“likes”:{$lte:50}}).pretty()where likes <= 50
大于{:{$gt:}}db.col.find({“likes”:{$gt:50}}).pretty()where likes > 50
大于或等于{:{$gte:}}db.col.find({“likes”:{$gte:50}}).pretty()where likes >= 50
不等于{:{$ne:}}db.col.find({“likes”:{$ne:50}}).pretty()where likes != 50

查询用户表中所有年龄大于等于25岁的用户

> db.user.find({"age": {$gte:25}},{"_id":0}).pretty()
> { "name" : "ChenYuRong", "age" : 25, "addr" : "ShenZhen" }
{ "name" : "LiQiLiang", "age" : 27, "addr" : "GuangZhou" }
{ "name" : "XiaoPai", "age" : 30, "addr" : "BeiJing" }
{ "name" : "YuChangHui", "age" : 32, "addr" : "FuJian" }
{ "name" : "XiaoHei", "age" : 28, "addr" : "ShenZhen" }

条件与

> db.user.find({"addr": "ShenZhen","age": {$gte:25}},{"_id":0}).pretty()
> { "name" : "ChenYuRong", "age" : 25, "addr" : "ShenZhen" }
{ "name" : "XiaoHei", "age" : 28, "addr" : "ShenZhen" }

条件或$or

db.col.find(
   {
      $or: [
	     {key1: value1}, {key2:value2}
      ]
   }
).pretty()
> db.user.find({$or:[{"addr":"ShenZhen"},{"age":{$gte:30}}]}).pretty()
> {
	"_id" : ObjectId("59ac1c57dca9453471d67f15"),
	"name" : "ChenYuRong",
	"age" : 25,
	"addr" : "ShenZhen"
}
{
	"_id" : ObjectId("59ac1c57dca9453471d67f17"),
	"name" : "XiaoPai",
	"age" : 30,
	"addr" : "BeiJing"
}
{
	"_id" : ObjectId("59ac1c57dca9453471d67f18"),
	"name" : "YuChangHui",
	"age" : 32,
	"addr" : "FuJian"
}
{
	"_id" : ObjectId("59ac1c57dca9453471d67f19"),
	"name" : "XiaoHei",
	"age" : 28,
	"addr" : "ShenZhen"
}

排序sort()

sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。

db.collection.find().sort({KEY:1}) //key表示要排序的字段
> db.user.find({"age":{$lt:30}}).sort({age:1}).pretty()
> {
	"_id" : ObjectId("59ac1c57dca9453471d67f1a"),
	"name" : "AnQi",
	"age" : 20,
	"addr" : "JieYang"
}
{
	"_id" : ObjectId("59ac1c57dca9453471d67f15"),
	"name" : "ChenYuRong",
	"age" : 25,
	"addr" : "ShenZhen"
}
{
	"_id" : ObjectId("59ac1c57dca9453471d67f16"),
	"name" : "LiQiLiang",
	"age" : 27,
	"addr" : "GuangZhou"
}
{
	"_id" : ObjectId("59ac1c57dca9453471d67f19"),
	"name" : "XiaoHei",
	"age" : 28,
	"addr" : "ShenZhen"
}

聚合aggregate()

db.collection.aggregate(AGGREGATE_OPERATION)
其中AGGREGATE_OPERATION的格式为
[
    {
        $group: {
            _id: {
                addr: '$addr'
            },
            totalCount: {
                $sum: 1
            }
        }
    }
]
  • $group是固定的,表示这里一个分组聚合操作。
  • _id表示需要根据哪一些列进行聚合,其实一个JSON对象,其key/value对分别表示结果列的别名以及需要聚合的的数据库列。
  • totaoCount表示聚合列的列名。
  • $sum表示要进行的聚合操作,后面的1表示每次加1。

eg: 根据地区统计用户人数

> db.user.aggregate([{$group:{_id:{userAddr:'$addr'},totalCount:{$sum:1}}}])
> { "_id" : { "userAddr" : "FuJian" }, "totalCount" : 1 }
{ "_id" : { "userAddr" : "JieYang" }, "totalCount" : 1 }
{ "_id" : { "userAddr" : "BeiJing" }, "totalCount" : 1 }
{ "_id" : { "userAddr" : "GuangZhou" }, "totalCount" : 1 }
{ "_id" : { "userAddr" : "ShenZhen" }, "totalCount" : 2 }

更新数据update()

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
  • query:对哪些数据进行更新操作。 update:对这些数据做什么操作。
  • upsert(可选):如果不存在update的记录,是否将其作为记录插入。true为插入,默认是false,不插入。
  • multi(可选):是否更新多条记录。MongoDb
  • 默认是false,只更新找到的第一条记录。如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern(可选):表示抛出异常的级别。

eg:更新user表名为chenyurong的记录,将其年龄更改为25岁

> db.user.update({'name':'chenyurong'},{$set:{'age':25}})
//$set表示进行赋值操作。

删除数据remove()

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
  • query(可选):删除的文档的条件。
  • justOne(可选):如果设为 true 或 1,则只删除一个文档。
  • writeConcern(可选):抛出异常的级别。

eg: 删除名为LiQiLiang的用户

> db.user.remove({"name":"LiQiLiang"})
WriteResult({ "nRemoved" : 1 })

去重查询distinct()

db.集合名称.distinct(‘去重字段’,{条件})
eg:查找年龄大于18的性别(去重)

db.stu.distinct('gender',{age:{$gt:18}})

表达式

用于处理输入文档并输出
表达式:’$列名’

常用表达式

$sum:计算总和,$sum:1同count表示计数
$avg:计算平均值
$min:获取最小值
$max:获取最大值
$push:在结果文档中插入值到一个数组中
$first:根据资源文档的排序获取第一个文档数据
$last:根据资源文档的排序获取最后一个文档数据
$group: 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值