ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mongodb 基本操作

2020-08-27 17:33:41  阅读:235  来源: 互联网

标签:name mongodb db 查询 fruit 文档 基本操作 find


所有操作都在 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() ,在当前库下运行将删除整个库。

 

标签:name,mongodb,db,查询,fruit,文档,基本操作,find
来源: https://www.cnblogs.com/liqiongming/p/13571630.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有