mongoDB是NoSQL非关系型数据库,在mongoDB中,一条记录被称作一个文档(document),类似于一个JSON对象,文档由field:value的键值对形式组成,其中value也可以是一个文档,形成一个层层嵌套的格式。
MongoDB | MySQL | 描述 |
Database | Database | 数据库 |
Collection | Table | 表格 |
Document | Row | 行 |
1.社区版下载地址:https://www.mongodb.com/try/download/community
2.选择package为zip
3.下载到本地后解压,进入到bin页面
(1)直接运行mongod.exe,会报错
Data directory D:\\data\\db\\ not found. Create the missing directory or specify another path using (1) the --dbpath command line option, or (2) by adding the 'storage.dbPath' option in the configuration file.
原因是mongoDB需要一个存放数据的文件夹,默认是/data/db(在linux环境下也有这个问题),解决办法有两个,对于windows环境,一是在当前盘下创建/data/db文件夹;二是在运行时指定数据存放路径,如下,即可启动成功。
mongod.exe -dbPath D:\xxx\data
(2) 支持远程连接。启动成功后,使用mongosh去连接服务,会发生连接不上的情况,原因如日志所示:
This server is bound to localhost. Remote systems will be unable to connect to this server. Start the server with --bind_ip to specify which IP addresses it should serve responses from, or with --bind_ip_all to bind to all interfaces. If this behavior is desired, start the server with --bind_ip 127.0.0.1 to disable this warning
意思是需要在启动时绑定IP地址,如果希望不限制任何机器来连接,可以绑定为0.0.0.0
mongod.exe -dbpath D:\xxx\data --bind_ip 0.0.0.0
如果只需要在本地连接,可以绑定为127.0.0.1,本地启动客户端连接即可成功。
mongod.exe -dbpath D:\xxx\data --bind_ip 127.0.0.1
1.介绍。在老版本中,一般下载的mongoDB的zip版本,解压后会在bin目录下发现一个mongo.exe程序,这个是用来连接mongoDB的客户端。但是6.0版本后,不会再附带这个客户端,而是建议使用mongosh来连接。
2.社区版下载地址:https://www.mongodb.com/try/download/shell
3.下载到本地,解压,进入到bin目录下。会发现一个mongosh.exe程序。运行该程序即可连接mongoDb,默认情况下连接的地址为127.0.0.1,端口27017。可以主动指定地址和端口,此时命令行如下:
mongosh.exe 127.0.0.1:27017
进入客户端之后,输入show dbs,可以查看所有数据库。
前提:本文创建一个数据库db_mongo,并创建一个集合preview,演示mongoDB操作方式。
1.查看及创建数据库
(1)查看所有的数据库: show dbs
test> show dbs;
admin 40.00 KiB
config 60.00 KiB
local 72.00 KiB
(2)查看当前所在的数据: db
test> db
test
(3) 创建数据库:use <数据库名>,如果该数据库存在,会切换到该数据库;如果该数据库不存在,则会自动创建该数据库并切换到该数据库。
test> use db_mongo
switched to db db_mongo
2. Insert 新增
新增文档时,使用db.collection.insertOne()插入单条记录,或者使用db.collection.insertMany()插入多条记录,如果集合不存在,则会自动在当前数据库下创建该集合(如果没有切换到某个数据库,默认在test数据库下)。
(1) 插入单条:
db.preview.insertOne(
{
name: "张三",
sex: "男",
hobbies: ["骑行","电影"],
age: 18,
city: "成都",
major:"计算机科学"
}
)
(2) 插入多条:
db.preview.insertMany(
[
{
name: "李四",
sex: "男",
hobbies: ["游泳","电影"],
age: 20,
city: "北京",
major:"电子技术"
},
{
name: "张无极",
sex: "男",
hobbies: ["音乐","跑步"],
age: 25,
city: "上海",
major:"计算机科学"
},
]
)
(3) 用户自定义_id字段:
在mongoDB中,每条记录都必须有一个_id字段唯一标识该文档,如果插入时未传入则会自动生成,否则使用传入的_id,例如:
db.preview.insertOne(
{
_id:"112233",
name: "张三",
sex: "男",
hobbies: ["骑行","电影"],
age: 18,
city: "成都",
major:"计算机科学"
}
)
结果:insertedId不是mongoDB内置的ObjectId类型,而是传入的类型。
{ acknowledged: true, insertedId: '112233' }
3.Query查询
(1) 查询语句为db.collection.find()。括号内不传值时查询该集合所有数据:
db.preview.find()
(2) 等值查询。查询字段等值数据,格式
{:,...}
查询name为"张三"的数据:
db.preview.find({name:"张三"})
(3) 操作符匹配。格式如下:
{ : { : }, ... }
其中,fileld1代表匹配的字段名,operator1代表匹配操作符,如$gt,$lt,$in等,value1代表匹配的值,可以是一个数组。
例1: 查询age大于19的记录
db.preview.find({age:{$gt:19}})
例2:查询city在"上海"或"成都"的记录
db.preview.find({city:{$in:["成都","上海"]}})
(4) 多条件的与并(AND/OR)匹配。
与匹配(AND):要求各个条件都满足,其中value也可以是操作符匹配格式{
{:,:,...}
例:查询city在"上海" 且 age大于19的记录
db.preview.find({city:"上海",age:{$gt:19}})
或匹配(OR):
{$or: [ { : }, { : },{: },... ]}
例: 查询city在"上海" 或 age大于20的记录
db.preview.find({$or:[{city:"上海"},{age:{$gt:19}}]})
4. Update修改
(1) mongoDB修改的语法:
db.collection.updateOne(, , )
db.collection.updateMany(, , )
db.collection.replaceOne(, , )
filter为匹配的条件,类似于SQL语句where后面的部分,update为修改的操作,options为可选项。
(2) 把name为"张三"的记录city字段改成"深圳":
db.preview.updateOne(
{name:"张三"},
{
$set:{
city:"深圳"
}
}
)
注:使用updateOne()时,尽管有多个记录/文档与条件匹配,只会修改第一个,如果想要把修改作用到所有符合条件的记录上,可以使用updateMany()方法:
db.preview.updateMany(
{name:"张三"},
{
$set:{
city:"深圳"
}
}
)
(3)把name为"张无极"的记录/文档替换成另外的内容:
db.preview.replaceOne(
{name:"张无极"},
{
name:"张三一",
sex: '男',
hobbies: [ '篮球', '跑步' ],
age: 23,
city: '广州',
major: '通信',
birth_day: new ISODate("2022-01-20")
}
)
注:替换文档,会把所有除_id字段的其他内容全部替换,但是不能修改_id的值,如果此时传入_id试图覆盖原本的_id值,则会抛出异常:
After applying the update, the (immutable) field '_id' was found to have been altered to _id: "xxxx"
5. Delete 删除
(1)删除的格式:
db.collection.deleteMany()
db.collection.deleteOne()
其中,括号内可以传入条件,deleteMany()删除所有符合条件的文档;deleteOne()只会删除一条符合条件的文档。
(2)删除city在"深圳"且岁数小于19岁的记录:
例1:删除一条
db.preview.deleteOne({
city:"深圳",
age:{$lt:19}
})
例2:删除所有符合条件的记录
db.preview.deleteMany({
city:"深圳",
age:{$lt:19}
})