mongo-基本命令

发布于 — 2020 年 04 月 14 日
#Mongo

docker下载:docker pull mongo 运行:docker run -itd --name mongo -p 27017:27017 mongo 进入容器并运行mongo命令:docker exec -it mongo mongo

基本操作命令:

插入操作insert

格式:

-   db.<集合>.insertOne(<JSON对象>)
-   db.<集合>.insertMany<[<JSON 1>,<JSON 2>, ...<JSON N>]> 示例:
-   `db.fruit.insertOne({name:"apple"})`
-   `db.fruit.insertMany([{name:"apple"},{name:"pear"}, {name:"orange"}])`

查询文档find

find是MongoDB中查询数据的基本指令,相当于SQL中的SELECT find返回的是游标 示例:

  • 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/"}) 按正则表达式查找

查询条件对照表:

    SQL | MQL
    ---|---
    a = 1 | {a : 1}
    a <> 1 (a!=1) | {a: {$ne: 1}}
    a > 1 | {a: {$gt: 1}}
    a >= 1 | {a: {$gte: 1}}
    a < 1 | {a: {$lt: 1}}
    a <= 1 | {a: {$lte: 1}}

查询逻辑对照表:

    SQL | MQL
    ---|---
    a = 1 AND b = 1 | {a : 1,b: 1} 或 {$and:[{a:1},{b:1}]}
    a =1 OR b=1 | {$or: [{a: 1},{b:1}]}
    a IS NULL | {a: {$exists: false}}
    a IN (1,2,3) | {a: {$in:[1,2,3]}}

查询逻辑运算符:

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

使用find搜索子文档

假设现在有一个文档:

db.fruit.insertOne({
    name : "apple",
    from : {
        country : "china",
        province : "guanddong"
    }
})

当要进行查询from属性中的country值为china时语句应该要怎样写呢?即查询fruit中的子文档from时应该怎样查询? 可以使用这样的语句:

db.fruit.find({"from.country":"china"})

使用find搜索数组

  1. 查询条件在数组中时 文档格式如下:
db.fruit.insert([
    {name:"apple",color:["red","green"]},
    {name:"pear",color:["yellow","green"]}
])

当要查询颜色为red语句时可以这样写:db.fruit.find({color:"red"}) 当查询条件为多个时,可以这样写:db.fruit.find({$or:[{color:"red"},{color:"yellow"}]})

  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"},
    ]
})

当需要查找城市为Rome的记录时: db.movies.find({"filming_locations.city":"Rome"}) 3. 当查找子数组的多个字段都需要满足条件时,可以使用如下查询。

db.getCollection('movies').find({
    "filming_locations.city":"Rome",
    "filming_locations.country":"USA"
})

也可使用$elemMatch来进行匹配查询

db.getCollection('movies').find({
    "filming_locations":{
        $elemMatch:{"city":"Rome","country":"USA"}
    }
})

控制find返回的字段

find({condition},{columns})

  • find可以指定返回指定的字段
  • _id字段必须明确指明不返还,否则默认返回
  • 在MongoDB中称其为投影(projection)
  • db.movies.find({"category":"action"},{"_id":0,title:1}) 这条查询语句中指明不返回id,返回title字段

使用remove删除文档

  • remove命令需要配合查询条件使用
  • 匹配查询条件的文档会被删除
  • 指定一个空文档条件会删除所有文档

实例:

  • db.testcol.remove({a:1}) 删除a=1的记录
  • db.testcol.remove({a:{$lt:5}}) 删除a<=5的记录
  • db.testcol.remove({}) 删除所有记录
  • db.testcol.remove() 报错

使用update更新文档

db.<集合>.update(<查询条件>,<更新字段>) 当被更新的字段如果不存在,则创建字段,如果存在则更新 以如下的结构为例:

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

name=apple的文档添加属性

db.fruit.updateOne({name:"apple"},{$set:{from:"china"}})
  • 使用updateOne()表示无论条件匹配多少条记录,始终只更新第一条
  • 使用updateMany表示条件匹配多少条就更新多少条
  • updateOne/updateMany方法要求更新条件部分必须有以下之一,否则将报 错:
    • $set/$unset
    • $push/$pushAll/$pop
    • $pull/$pullAll
    • $addToSet

更新命令:

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

使用drop删除集合

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

db.fruit.drop()

使用dropDatabase删除数据库

  • 使用db.dropDatabase()来删除数据库
  • 数据库相应文件也会被删除,磁盘空间将被释放
use tempDB
db.dropDatabase()