[mongo]认识mongo基本操作

认识mongo基本操作

MongoDB

  • image

MongoDB vs. 关系型数据库

  • image

特点

  • 快速响应业务变化

    • 多形性: 同一个集合中可以包含不同字段(类型)的文档对象
    • 动态性: 线上修改数据模式,修改是应用与数据库均无须下线
    • 数据治理: 支持使用 JSON Schema 来规范数据模式。在保证模式灵活动态的前提下,提供数据治理能力
  • 原生的高可用和横向扩展能力

    • Replica Set – 2 to 50 个成员
    • 自恢复
    • 多中心容灾能力
    • 滚动服务 – 最小化服务终端
  • 横向扩展能力

    • 需要的时候无缝扩展
    • 应用全透明
    • 多种数据分布策略
    • 轻松支持 TB – PB 数量级
  • MongoDB 技术优势总结

    • JSON 结构和对象模型接近,开发代码量低
    • JSON 的动态模型意味着更容易响应新的业务需求
    • 复制集提供 99.999% 高可用
    • 分片架构支持海量数据和无缝扩容

增删改查

增加

db.fruit.insertOne({name: "apple"})
db.fruit.insertMany([
{name: "apple"},
{name: "pear"},
{name: "orange"}
])

查找

  • 实例
db.movies.find( { "year" : 1975 } ) //单条件查询
db.movies.find( { "year" : 1989, "title" : "Batman" } ) //多条件and查询
db.movies.find( { $and : [ {"title" : "Batman"}, { "category" : "action" }] } ) // and的另一种形式
db.movies.find( { $or: [{"year" : 1989}, {"title" : "Batman"}] } ) //多条件or查询
db.movies.find( { "title" : /^B/} ) //按正则表达式查找
  • 查询条件对照表对照表

    • image
  • 查询逻辑对照表

    • image
  • 查询逻辑运算符

    ● $lt: 存在并小于
    ● $lte: 存在并小于等于
    ● $gt: 存在并大于
    ● $gte: 存在并大于等于
    ● $ne: 不存在或存在但不等于
    ● $in: 存在并在指定数组中
    ● $nin: 不存在或不在指定数组中
    ● $or: 匹配两个或多个条件中的一个
    ● $and: 匹配全部条件

  • 使用 find 搜索子文档

db.fruit.insertOne({
name: "apple",
from: {
country: "China",
province: "Guangdon" }
})
  • 查询子文档应该写入子文档的路径
    • db.fruit.find( { “from.country” : “China” } ) //有结果
    • db.fruit.find( { “from” : {country: “China”} } ) //无结果返回
  • 使用 find 搜索数组
db.fruit.insert([
{ "name" : "Apple", color: ["red", "green" ] },
{ "name" : "Mango", color: ["yellow", "green"] }
])
db.fruit.find({color: "red"})
db.fruit.find({$or: [{color: "red"}, {color: "yellow"}]} )
  • 使用 find 搜索数组中的对象1
db.movies.insertOne( {
"title" : "Raiders of the Lost Ark",
"filming_locations" : [ 
 { "city" : "Los Angeles", "state" : "CA", "country" : "USA" },
{ "city" : "Rome", "state" : "Lazio", "country" : "Italy" },
{ "city" : "Florence", "state" : "SC", "country" : "USA" }] 
})
db.movies.find({"filming_locations.city": "Rome"})
  • 使用 find 搜索数组中的对象2
    • $elemMatch它表示必须是同一个子对象满足多个条件
db.getCollection('movies').find({
"filming_locations.city": "Rome",
"filming_locations.country": "USA"
})

db.getCollection('movies').find({
"filming_locations": {
$elemMatch:{"city":"Rome", "country": "USA"}
}
})
  • 控制 find 返回的字段
    • find 可以指定只返回指定的字段
    • _id字段必须明确指明不返回,否则默认返回
    • 在 MongoDB 中我们称这为投影(projection)
    • _id不返回,title返回
db.movies.find({"category": "action"},{"_id":0, title:1})

使用 remove 删除文档

  • remove 命令需要配合查询条件使用
  • 匹配查询条件的的文档会被删除
  • 指定一个空文档条件会删除所有文档
  • 示例
db.testcol.remove( { a : 1 } ) // 删除a 等于1的记录
db.testcol.remove( { a : { $lt : 5 } } ) // 删除a 小于5的记录
db.testcol.remove( { } ) // 删除所有记录
db.testcol.remove() //报错

使用 update 更新文档

  • Update 操作执行格式:db.<集合>.update(<查询条件>, <更新字段>)
db.fruit.insertMany([
{name: "apple"},
{name: "pear"},
{name: "orange"}
])

db.fruit.updateOne({name: "apple"}, {$set: {from: "China"}})

使用 update 更新文档2

  • updateOne 表示无论条件匹配多少条记录,始终只更新第一条;
  • 使用 updateMany 表示条件匹配多少条就更新多少条;
  • updateOne/updateMany 方法要求更新条件部分必须具有以下之一,否则将报错
    s e t / set/ set/unset
    p u s h / push/ push/pushAll/$pop
    p u l l / pull/ pull/pullAll
    • $addToSet

使用 update 更新数组

  • $push: 增加一个对象到数组底部
  • $pushAll: 增加多个对象到数组底部
  • $pop: 从数组底部删除一个对象
  • $pull: 如果匹配指定的值,从数组中删除相应的对
  • $pullAll: 如果匹配任意的值,从数据中删除相应的对象
  • $addToSet: 如果不存在则增加一个值到数组

使用 drop 删除集合

  • 使用 db.<集合>.drop() 来删除一个集合
  • 集合中的全部文档都会被删除
  • 集合相关的索引也会被删除
  • db.colToBeDropped.drop()

使用 dropDatabase 删除数据库

  • 使用 db.dropDatabase() 来删除数据库
  • 数据库相应文件也会被删除,磁盘空间将被释放
use tempDB
db.dropDatabase()
show collections // No collections
show dbs // The db is gone
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值