MongoDB基本操作(安装+CRUD)

一、mongoDB基本概念

mongoDB是什么

        mongoDB是NoSQL非关系型数据库,在mongoDB中,一条记录被称作一个文档(document),类似于一个JSON对象,文档由field:value的键值对形式组成,其中value也可以是一个文档,形成一个层层嵌套的格式。

和MySQL相对的概念

MongoDBMySQL描述
DatabaseDatabase数据库
CollectionTable

表格

DocumentRow

     

二、mongoDB安装(windows的zip版本)

mongoDB安装

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 <address> 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

mongosh安装

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,可以查看所有数据库。

三、基本操作(CRUD)

前提:本文创建一个数据库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) 等值查询。查询字段等值数据,格式

{<filedName>:<fieldValue>,...}

        查询name为"张三"的数据:

db.preview.find({name:"张三"})

 (3) 操作符匹配。格式如下:

{ <field1>: { <operator1>: <value1> }, ... }

        其中,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也可以是操作符匹配格式{<operator1>: <value1>}

{<field1>:<value1>,<field2>:<value2>,...}

        例:查询city在"上海" 且 age大于19的记录

db.preview.find({city:"上海",age:{$gt:19}})

       或匹配(OR):

{$or: [ { <filed1>: <value1> }, { <field2>: <value2> },{<field3>: <value3>},... ]}

      例: 查询city在"上海" 或 age大于20的记录

db.preview.find({$or:[{city:"上海"},{age:{$gt:19}}]})

4. Update修改

(1) mongoDB修改的语法:

db.collection.updateOne(<filter>, <update>, <options>)
db.collection.updateMany(<filter>, <update>, <options>)
db.collection.replaceOne(<filter>, <update>, <options>)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值