MongoDB 基本操作

MongoDB 基本操作

1.insert 插入

操作格式:

  • db.<集合>.insertOne(<JSON对象>)
  • db.<集合>.insertMany([<JSON对象1>,<JSON对象2>,<JSON对象3>…])

示例:

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

2.remove 删除

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

示例:

db.<collection_name>.remove({a:1});// 删除 a = 1 的文档
db.<collection_name>.remove({a:{$lt:5});// 删除 a < 5 的文档
db.<collection_name>.remove({});// 删除所有文档
db.<collection_name>.remove();// 报错

3.update 更新

3.1 update 操作

  • Update 操作执行格式
    • db.<集合>.update(<查询条件>,<更新字段>)

示例:

插入数据

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

更新数据

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

找到名称为 apple 的文档,设置 from 字段为 China

3.2 注意点

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

操作符介绍

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

4.find 查找

4.1 关于 find

  • find 是 MongoDB 中查询数据的基本指令,相当于 SQL 中的 SELECT 。

  • find 返回的是游标

4.2 find 示例

  • 单条件查询
db.<collection_name>.find({year:1988});
  • 多条件 and 查询
db.<collection_name>.find({条件1,条件2});// 形式1
db.<collection_name>.find({$and:[{条件1},{条件2}]}); // 形式2
  • 多条件 or 查询
db.<collection_name>.find({$or:[{条件1},{条件2}]})
  • 按正则表达式查找
db.<collection_name>.find({"title":/^B/})

4.3 查询条件对照表

SQLMQL
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}}

4.4 查询逻辑对照表

SQLMQL
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]}}

4.5 查询逻辑运算符

MQLSQL含义
$lt<存在并小于
$lte<=存在并小于等于
$gt>存在并大于
$gte>=存在并大于等于
$ne<>不存在或者存在但不等于
$inin存在并在指定数组中
$ninnot in不存在或者不在指定数组中
$oror匹配多个条件中的一个
$andand匹配全部条件

4.6 find 子文档搜索

  • find 支持使用 “field.sub_field” 的形式查询子文档。假设有一个文档:
db.<collection_name>.insertOne({
    name: "apple",
    from: {
        country: "China",
        province: "wuhan"
    }
})
  • 子文档查询
db.<collection_name>.find({
    "from.country": "China"
})

4.7 find 数组搜索

  • find 支持对数组中的元素进行搜索,假设有一个文档:
db.<collection_name>.insert([
   {name: "apple",color:["red","green"]},
   {name: "mango",color:["yellow","green"]}
])
  • 查询
db.<collection_name>.find({
    "color": "red"
})

4.8 find 数组中的多个字段

在数组中搜索子对象的多个字段时,如果使用 $elemMatch,它表示必须是同一个子对象满足多个条件

假设有一个文档

db.<collection_name>.insertOne(
    {
        "title": "Raiders of the Lost Ark",
        "filming_locations": [{
            "city": "Los Angeles",
            "country": "USA"
        }, {
            "city": "Florence",
            "country": "USA"
        }, {
            "city": "Rome",
            "country": "Italy"
        }]
    }
)

查询

db.<collection_name>.find({
    "filming_locations": {
        $elemMatch: {
            "city": "Rome",
            "country": "Italy"
        }
    }
})

4.9 控制 find 返回的字段

  • find 可以指定只返回指定的字段
  • _id 字段必须明确指明不返回,否则默认返回
  • 在 MongoDB 中我们称这位投影(projection)

示例:

db.movies.find({"title":"hero"},{"_id":0,"title":1})

不返回 _id,返回 title

5.drop 删除集合

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

注意:删除之后无法还原,即使有复制集,集群节点中的集合都会同步被删除

6.dropDatabase 删除数据库

  • 使用 db.dropDatabase() 来删除数据库
  • 数据库文档也会被删除,磁盘空间释放

7.参考

  • 《MongoDB高手课》- 唐建法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值