首页 > 数据库 >MongoDB使用教程

MongoDB使用教程

时间:2023-10-01 18:34:08浏览次数:37  
标签:教程 name .. MongoDB db id 文档 使用 find

一、基本概念

一)数据库(database)

数据库是一个仓库,在仓库中可以存放集合

二)集合(collection)

集合类似于数组,在集合中可以存放文档

三)文档(document)

文档是数据库中的最小单位,存储和操作的内容都是文档

在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合。

二、基本指令

# 显示有多少个数据库
show dbs 、show databases
# 进入到指定数据库中
use 数据库名
# 当前所处的数据库
db
# 显示数据库中所有的集合
show collections

三、数据库中的(CRUD)增删改查操作

向集合中插入文档

  • db..insert(doc)
  • db..insertOne(doc) 只能插入一个文档
  • db..insertMany(doc) 必须传多个,用数组阔起来
# 例:向 stus 集合中插入一个新的学生对象
db.stus.insert({name:"孙悟空",age:18,gender:"男"})

查询当前集合中所有的文档

db..find()
find() 用来查询集合中所有符合条件的文档
find({}) 用来接受一个对象作为条件参数
例如: db.stus.find({name:"dfs"}) 查询 name 为 dfs 的文档
find() 返回的是一个数组
db..findOne() 用来查询集合中符合条件的第一个文档
findOne() 返回的是一个文档对象
db..find().count() 查询符合条件的个数

1.mongodb支持直接通过内嵌文档的属性值进行查询

什么是内嵌文档:hobby就属于内嵌文档

{
name:'liu',
hobby:{
movies:['movie1','movie2'],
cities:['zhuhai','chengdu']
}
}
db.users.find({hobby.movies:'movie1'}) //错误
db.users.find({"hobby.movies":'movie1'})//此时查询的属性名必须加上引号

2.查询操作符的使用

比较操作符

$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$eq 等于的另一种写法
db.users.find({num:{$gt:200}}) #大于200
db.users.find({num:{$gt:200,$lt:300}}) #大于200小于300
$or 或者
db.users.find(
{
$or:[
{num:{$gt:300}},
{num:{$lt:200}}
]
}
) #大于300或小于200

3.分页查询

db.users.find().skip(页码-1 * 每页显示的条数).limit(每页显示的条数)
db.users.find().limit(10) #前10条数据
db.users.find().skip(50).limit(10) #跳过前50条数据,即查询的是第61-70条数据,即第6页的数据

4.排序

db.emp.find().sort({sal:1}) #1表示升序排列,-1表示降序排列
db.emp.find().sort({sal:1,empno:-1}) #先按照sal升序排列,如果遇到相同的sal,则按empno降序排列

注意:skip,limit,sort可以以任意的顺序调用,最终的结果都是先调sort,再调skip,最后调limit

5.设置查询结果的投影,即只过滤出自己想要的字段

db.emp.find({},{ename:1,_id:0}) #在匹配到的文档中只显示ename字段

修改文档
db..update(查询条件, 新对象) 默认情况下只改一个
例子1 db..update({name:"沙和尚"},{age:28}) 一般不这么用
缺点: 查询到 name 为沙和尚的值 后 用 age:28 替换整个文档
例子2 $set 修改文档的指定属性,没有就增加
db..update(
{"name":"沙和尚"},
{$set:{
gender:"男"
}}
)
优点:只修修改 gender 的字段
例子3 $unset 删除文档的指定属性
db..update(
{"name":"沙和尚"},
{$unset:{
gender:"男"
}}
)
db..updateMany(查询条件, 新对象) 同时修改多个符合条件的文档
db..updateOne(查询条件, 新对象) 只修改一个符合条件的文档
db..replaceOne 替换一个文档
删除文档
db.<collection.remove()>
remove() 根据条件来删除文档,传递的条件跟find()一样。默认删除符合条件的所有文档
db.stus.remove({_id:"hello"})
1
注意:若只传入一个空集合,则会删除所有数据
db..deleteOne() 删除一个
db..deleteMany() 删除多个
文档间的关系
一对一
一对多
多对多
一对多

用户与订单:

db.users.insert([
{_id:100,username:'liu1'},
{_id:101,username:'liu2'}
])
db.orders.insert([
{list:['apple','banana'],user_id:100},
{list:['apple','banana2'],user_id:100},
{list:['apple'],user_id:101}
])
查询liu1的所有订单:
首先获取liu1的id: var user_id=db.users.findOne({name:'liu1'})._id;
根据id从订单集合中查询对应的订单: db.orders.find({user_id:user_id})
多对多

老师与学生

db.teachers.insert([
{
_id:100,
name:'liu1'
},
{
_id:101,
name:'liu2'
},
{
_id:102,
name:'liu3'
}
])
db.students.insert([
{
_id:1000,
name:'xiao',
tech_ids:[100,101]
},
{
_id:1001,
name:'xiao2',
tech_ids:[102]
}
])

标签:教程,name,..,MongoDB,db,id,文档,使用,find
From: https://www.cnblogs.com/yifanSJ/p/17739098.html

相关文章

  • 无涯教程-JavaScript - UNICODE函数
    描述UNICODE函数返回与文本的第一个字符相对应的数字(代码点)。语法UNICODE(text)争论Argument描述Required/OptionalTextTextisthecharacterforwhichyouwanttheUnicodevalue.RequiredNotes如果文本包含部分替代或无效的数据类型,则UNICODE返回#VALUE!......
  • 三丰 /////云免费云服务器的使用体验
    在网上看到了三风云主机的介绍,想着试试看就注册了账号搞了一个免费云服务器试试,怎么说呢,作为一个新手,之前完全没有接触过云服务器,使用了三f云的免费云服务器,整个过程非常简单,很快就可以完成服务器的设置和部署。官方也提供了带面板的和纯净的centos,对于我来说还是挺方便的,而且我是......
  • 一个高精度24位ADC芯片ADS1222的使用方法及参考电路程序成都控制器定制
    前一段时间,在做单片机、PLC、电路板、控制器/箱、仪器仪表、机电设备或系统、自动化、工控、传感、数据采集、自控系统、控制系统,物联网,电子产品,软件、APP开发设计定制定做开发项目时,有要求用到24位的高精度ADC,用于对外部信号采集。经查阅,初步获得一款满足要求的芯片:ADS1222,本文......
  • adoc转换html+UPF低功耗仿真例子+python转换C代码+readmemh的@使用
    adoc转换htmladoc这种格式是很多riscv文档使用的格式,该格式可以生成pdf,生成html。生成html的好处是,选中和翻译方便,复制粘贴方便。首先是gem软件要安装,这个软件似乎是ruby相关的(RubyGemsisapackagemanagerfortheRubyprogramminglanguagethatprovidesastandardform......
  • MongoDB搭建
    一、Docker-composeversion:'3'services:mongodb:image:mongocontainer_name:mongodbrestart:alwaysports:-27017:27017volumes:-/var/docker/server/mongodb/database:/data/dbenvironment:-MONGO_......
  • 使用 Gradle:将项目代码导入 IntelliJ
    1.将项目导入IntelliJ打开IntelliJ,如果还打开了其他程序,请关闭它们,再次进入欢迎屏幕。这次,不选择“创建新项目”,而是选择导入项目(ImportProject)。点击导入项目(ImportProject)后,会弹出一个窗口,提示你从某个文件夹导入项目。转到保存ud282-master的文件......
  • JS使用a标签下载文件
    Dowload(url,fileName){letxmlResquest=newXMLHttpRequest();xmlResquest.open('GET',url,true);xmlResquest.setRequestHeader('Content-type','application/json');xmlResquest.setRequestHeader(......
  • Vue3 appear 失效 如何使用 appear
    最近在学习vue3的动画时遇到appear 无法生效的问题问题的具体表现:看以下代码,按理应该来说,如果我们设置fuct-appear-from,fuct-appea-active后在元素初始出现时应该会有一个效果html<Transitionname="fuct"appear><divclass="doc"v-if="show"></div></Trans......
  • 【2.1】Pydantic使用方法
    【一】介绍Datavalidationandsettingsmanagementusingpythontypeannotations.使用Python的类型注解来进行数据校验和settings管理pydanticenforcestypehintsatruntime,andprovidesuserfriendlyerrorswhendataisinvalid.Pydantic可以在代码运行时提供类......
  • 【4.0】Fastapi简单使用
    【一】Fastapi引入【1】构建基础的fastapi项目fromfastapiimportFastAPIfromtypingimportOptionalfrompydanticimportBaseModel#创建fastapi对象app=FastAPI()#定义模型表classCityInfo(BaseModel):#省份province:str#城市coun......