mongoDB快速入门
2021/12/1 19:09:53
本文主要是介绍mongoDB快速入门,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
安装
1.获取安装包
wget https://fastdl.mongodb.org/linux/m2ongodb-linux-x86_64-rhel70-4.4.2.tgz
2.进行解压
tar -xvzf mongodb-linux-x86_64-rhel70-4.4.2.tgz
3.添加到系统执行路径( ~/.bashrc)
export PATH=$PATH:<你机器MongoDB bin目录,如:/usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.4.2/bin>
执行 source ~/.bashrc,使其生效
4.创建数据目录
mkdir -p /data/db # 这个路径是MongoDB默认的数据存放路径
5.启动MongoDB服务
mongod # 如果你不希望使用的默认数据目录可以通过 添加 --dbpath 参数指定路径
前台启动则需要开启另一个窗口进行链接,所以我们使用后台启动
a.后台启动必须创建日志目录,在db文件夹下创建logpath文件夹存放目录
mkdir logpath
b.创建日志文件output.out
touch output.out
c.后台启动
mongod --fork --logpath /data/db/logpath/output.out
出现如下画面启动成功
查看日志
添加数据
db.集合.insertOne() // 添加单个文档
db.集合.insertMany([{},{}]) // 批量添加文档
db.集合.insert() // 添加单个文档
db.inventory.insertMany([ { item: "journal", qty: 25, status: "A", size: { h: 14, w: 21, uom: "cm" }, tags: [ "blank", "red" ] }, { item: "notebook", qty: 50, status: "A", size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank" ] }, { item: "paper", qty: 10, status: "D", size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank", "plain" ] }, { item: "planner", qty: 0, status: "D", size: { h: 22.85, w: 30, uom: "cm" }, tags: [ "blank", "red" ] }, { item: "postcard", qty: 45, status: "A", size: { h: 10, w: 15.25, uom: "cm" }, tags: [ "blue" ] } ]);
上述操作返回一个包含确认指示符的文档和一个包含每个成功插入文档的_id的数组
查询数据
整个文档查询
db.inventory.find({}) 查询所有的文档
db.inventory.find({}).pretty() 返回格式化后的文档
条件查询
1. 精准等值查询
db.inventory.find( { status: "D" } );
db.inventory.find( { qty: 0 } );
2. 多条件查询
db.inventory.find( { qty: 0, status: "D" } );
3. 嵌套对象精准查询
db.inventory.find( { "size.uom": "in" } );
4. 返回指定字段
db.inventory.find( { }, { item: 1, status: 1 } );
默认会返回_id 字段, 同样可以通过指定 _id:0 ,不返回_id 字段
5. 条件查询 and
db.inventory.find({$and:[{"qty":0},{"status":"A"}]}).pretty();
6. 条件查询 or
db.inventory.find({$or:[{"qty":0},{"status":"A"}]}).pretty();
Mongo查询条件和SQL查询对照表
SQL | MQL |
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}} |
in | { a: { $in:[ x, y, z]}} |
not in | { a: { $nin:[ x, y, z]}} |
a is null | { a: { $exists: false }} |
复合主键
db.demeDoc.insert( { _id: { product_name: 1, product_type: 2}, supplierId:" 001", create_Time: new Date() } )
_id中添加多个字段就是复合主键。复合主键是有顺序的。
逻辑操作符匹配
$not : 匹配筛选条件不成立的文档 $and : 匹配多个筛选条件同时满足的文档 $or : 匹配至少一个筛选条件成立的文档 $nor : 匹配多个筛选条件全部不满足的文档
1.$not
{ field: { $not : { operator-expression} }}
db.members.find({points: { $not: { $lt: 100}}} );
2.$and
{ $and : [ condition expression1 , condition expression2 ..... ]}
昵称等于曹操, 积分大于 1000 的文档 db.members.find({$and : [ {nickName:{ $eq : "曹操"}}, {points:{ $gt:1000}}]});
当作用在不同的字段上时 可以省略 $and
db.members.find({nickName:{ $eq : "曹操"}, points:{ $gt:1000}});
当作用在同一个字段上面时可以简化为
db.members.find({points:{ $gte:1000, $lte:2000}});
3.$or
{ $or :{ condition1, condition2, condition3,... }}
db.members.find( {$or : [ {nickName:{ $eq : "刘备"}}, {points:{ $gt:1000}}]} );
文档投影: 可以有选择性的返回数据
db.collection.find( 查询条件, 投影设置)
1标识返回,0标识不返回,非主键字段不能同时混选0或1
db.members.find({},{_id:0 ,nickName:1, points:1})
db.members.find({},{_id:0 ,nickName:1, points:0})
$slice 返回数组中的部分元素
插入一条数据
db.members.insertOne( { _id: {uid:3,accountType: "qq"}, nickName:"张飞", points:1200, address:[ {address:"xxx",post_no:0000}, {address:"yyyyy",post_no:0002} ]} );
返回数组的第一个元素
db.members.find( {}, {_id:0, nickName:1, points:1, address: {$slice:1} });
slice: 值
1: 数组第一个元素
-1:最后一个元素
-2:最后两个元素
slice[ 1,2 ] : skip, limit 对应的关系
elementMatch 进行数组元素进行匹配
添加一组数据
db.members.insertOne( { _id: {uid:4,accountType: "qq"}, nickName:"张三", points:1200, tag:["student","00","IT"]} );
查询tag数组中第一个匹配"00" 的元素
db.members.find( {}, {_id:0, nickName:1, points:1, tag: { $elemMatch: {$eq: "00" } } });
更新操作
updateOne/updateMany 方法要求更新条件部分必须具有以下之一,否则将报错
$set 给符合条件的文档新增一个字段,有该字段则修改其值
$unset 给符合条件的文档,删除一个字段
$push: 增加一个对象到数组底部
$pop:从数组底部删除一个对象
$pull:如果匹配指定的值,从数组中删除相应的对象
$pullAll:如果匹配任意的值,从数据中删除相应的对象
$addToSet:如果不存在则增加一个值到数组
更新操作
db.collection.update( <query>,<update>,<options>)
<query> 定义了更新时的筛选条件
<update> 文档提供了更新内容
<options> 声明了一些更新操作的参数
插入两条数据演示:
db.userInfo.insert([ { name:"zhansan", tag:["90","Programmer","PhotoGrapher"] }, { name:"lisi", tag:["90","Accountant","PhotoGrapher"] }]);
将tag 中有90 的文档,增加一个字段: flag: 1
db.userInfo.updateMany( {tag:"90"}, {$set:{flag:1}} );
flag字段现已有,在更新则为更新操作
db.userInfo.updateOne( {tag:"90"}, {$set:{flag:2}} );
默认只会更新第一个匹配的值,可以通过设置 options {multi: true} 设置匹配多个文档并更新
db.doc.update( {name:"zhangsan"}, {$set:{ flag: 1 }}, {multi:true} );
更新操作符
$set 更新或新增字段
$unset删除字段
$rename 重命名字段
$inc 加减字段值
$mul 相乘字段值
$min 采用最小值
$max 次用最大值
删除
db.collection.remove(<query>,<options>)
默认情况下,会删除所有满足条件的文档, 可以设定参数 { justOne:true},只会删除满足添加的第一条文档
db.collection.drop( { writeConcern:<doc>})
<doc> 定义了本次删除集合操作的安全写级别
db.collection.remove 只会删除所有的文档,直接使用remve删除所有文档效率比较低,可以使用 drop 删除集合,才重新创建集合以及索引。
这篇关于mongoDB快速入门的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享