mongodb 基本操作

所有操作都在 MongoDB 可视化工具 Robo 3T 软件下演示操作

 

一:使用 insert 插入文档:

 

插入一条数据与多条数据的格式:

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

 

示例:

1 db.fruit.insertOne({name: "apple"})
2 
3 db.fruit.insertMany([
4         {name: "apple"},
5         {name: "pear"},
6         {name: "orange"}
7     ])

 

Robo 3T:

单条:

 

 

多条:

 

 

二:使用 find 查询文档:

 

查询条件对照表:

 

 

运算符:

1 $lt  :存在并小于; 
2 $lte :存在并小于等于;
3 $gt  :存在并大于;
4 $gte :存在并大于等于;
5 $ne  :不存在或存在但不等于;
6 $in  :存在并在指定数组中;
7 $nin :不存在或不在指定数组中;
8 $or  :匹配两个或多个条件中的一个;
9 $and :匹配全部条件;

 

查询示例:

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

 

使用 find 查询子文档:

 1 # 插入带有子文档的文档数据;
 2 db.fruit.insertOne({
 3     name: "apple",
 4     from: {
 5         country: "China",
 6         province: "Guangdon"
 7     }
 8 })
 9 
10 # 查询:
11 db.fruit.find({"from.country": "China"})

 

Robo 3T:(上方为插入文档的命令,下方显示的数据需使用 db.getCollection('fruit').find({}) 查询才会显示结果)

 

查询数组中的元素(例1):

 1 # 插入带数组的文档数据
 2 
 3 db.fruit.insert([
 4     {"name": "Apple", color: ["red", "green"]},
 5     {"name": "Mango", color: ["yellow", "green"]}
 6 ])
 7 
 8 # 查询
 9 
10 db.fruit.find({color: "red"})  //显示一个结果;
11 db.fruit.find({$or: [{color: "red"}, {color: "yellow"}]})  //显示两条结果;

 

Robo 3T:(插入的数组文档的显示格式)

 

查询数组中的对象(例2):

 1 # 文档数组中的子文档
 2 
 3 db.movies.insertOne({
 4     "title": "Raiders of the Lost Ark",
 5     "filming_locations": [
 6         {"city": "Los Angeles", "state": "CA", "country": "USA"},
 7         {"city": "Rome", "state": "Lazio", "country": "Italy"},
 8         {"city": "Florence", "state": "SC", "country": "USA"}
 9     ]
10 })   
11 
12 
13 # 查询城市为 Rome 的记录
14 
15 db.movies.find({"filming_locations.city": "Rome"})

 

Robo 3T的文档显示:

 

查询在同一子对象中必须同时满足两个条件的文档,如下所示:

1 # 第一种方法:
2 
3 db.getCollection('movices').find({
4     "filming_locations.city": "Rome",
5     "filming_locations.country": "USA"
6 })

第二种,使用 $elemMatch 查询,它表示必须是同一子对象满足多个条件。

(子对象  city=Rome  ,它的  country=Italy 而不是等于 USA ,所以查询返回的文档为空)

 

使用 find 返回指定字段

_id 字段必须明确指定不返回(0),否则默认返回(1);

1 # 不返回 _id,只返回 title;
2 
3 db.movies.find({}, {"_id": 0, title: 1})
4 
5 # {} 表示操作所有文档,可加条件,比如只找 category=action 的文档数据;
6 db.movies.find({"category": "action"}, {"_id": 0, title: 1})

 

三:使用 remove 删除文档:

示例:

1 db.testcol.remove({a: 1})  //删除 a 等于 1 的文档;
2 db.testcol.remove({a: {$lt: 5}})  //删除 a 小于 5 的文档;
3 db.testcol.remove({})  //删除所有文档;
4 db.tesfcol.remove()  //错误写法,报错;

 

四:使用 update 更新文档

 

格式: db.<集合>.update(<查询条件>, <更新字段>) 

 

updateOne:表示无论条件匹配多少条记录,始终只更新第一条;

updateMany:表示条件匹配多少条就更新多少条;

两个方法在要求更新的部分中,必须加入 以下操作符中的一个,才能进行更新操作。否则会报错:

1 $set     :更新的字段不存在时新增字段,存在则修改它;
2 $unset   :删除字段;
3 $push    :增加一个对象到数组底部;
4 $pushAll :增加多个对象到数组底部;
5 $pop     :从数组底部删除一个对象;
6 $pull    :如果匹配指定的值,从数组中删除相应的对象;
7 $pullAll :如果匹配任意的值,从数据中删除相应的对象;
8 $addToSet:如果不存在则增加一个值到数组;

例子:

1 # 插入多条数据;
2 db.fruit.insertMany([
3     {name: "apple"},
4     {name: "pear"},
5     {name: "orange"}
6 ])
7 
8 # 根据查询条件更新文档数据;
9 db.fruit.updateOne({name: "apple"}, {$set: {from: "China"}})

 

Robo 3T:(通过找出  name=apple  的数据后,使用  $set  进行更新)

 

 

五:使用 drop 删除集合

 

格式: db.<集合>.drop() 

该命令将会删除全部文档,以及删除集合相关的索引。

慎用 ! 删除整个库: db.dropDatabase() ,在当前库下运行将删除整个库。

 

posted @ 2020-08-27 17:26  F·灬小人物  阅读(757)  评论(0编辑  收藏  举报