首页 > 数据库 >mongodb基本使用

mongodb基本使用

时间:2023-04-29 23:22:36浏览次数:33  
标签:基本 title mongodb year db movies 文档 使用 find

mongodb基本使用

1.mongodb不是关系型数据库,而是面向文档的数据库

在mongo中,文档的键不是固定的,文档的键对应的值的数据类型也不是固定的。在mongo中,集合类似于关系型数据库中的表,文档类似于关系型数据库中的行。每个文档都有一个特殊的键‘_id’(由mongo创建),在它所属的集合中是唯一的。

2.启动mongodb

启动服务端:

mongod --dbpath <dbpath>

启动客户端:

mongo

mongodb的客户端使用的是javascript语法,可以在终端中输入Math.round(1.2),终端会返回给我们一个1

可以使用db命令查看当前使用的是哪个数据库

3.基本的curd

在mongo中使用use切换数据库

use movies

我们在终端中设置一个js变量

 movie = {title:"movie title", year: 1997}

把变量插入到集合中

db.movies.insertOne(movie)

查看movies集合中的数据,在mongo中常用的读取方法有find和findOne,find用于查找所有文档,而findOne只查找第一个文档

db.movies.find()

如果想规整的查看数据,可以使用pretty方法

db.movies.find().pretty()

使用updateOne更新数据,updateOne接受两个参数,第一个是<condition>,第二个是要更新的数据,用$set标记

db.movies.updateOne({year: 1997}, {$set: {year: 1949}})

删除可以使用deleteOne和deletemany,使用deleteOne删除我们刚才更新的这条数据。

db.movies.deleteOne({year: 1949})

4.数据类型

在mongo中可以使用的数据类型和js中的一样,有字符串、数字、布尔值等。

可以使用数组

hobbies = ['play', 'eat']

在文档中使用数组

db.<collectionName>.insertOne({hobbies: hobbies})

文档的某个字段依旧是一个文档(对象)

db.<collectionName>.insertOne({address: {phoneNum: 123456, addr: 'xxx 市'}})

5.创建、更新、删除文档

插入一条数据

db.movies.insertOne({title: 'title 01', year: 2023})

删除集合

db.movies.drop()

插入多条数据,参数最外层使用’[]‘包裹,使用insertMany插入数据时,默认插入是无序的,如果希望有序,可以在第二个配置项参数中加上ordered: true。有序插入时候如果有报错会导致mongo停止后续插入,而无序插入不会。

db.movies.insertMany([{title: 'title 01', year: 2023}, {title: 'title 02', year: 2024}])

删除文档可以使用deleteOne和deleteMany,分别对应删除一个文档和多个文档

db.movies.deleteOne({_id: ObjectId('644cdf85d86f86aec1bbb6ce')})

对文档中的数字类型进行更新,使用$inc,让year累加1

db.movies.update({title: 'title 02'}, {$inc: {year: 1}})

对文档中的任意字段进行更改或者添加都可以使用$set

给movie文档添加一个’desc‘字段

db.movies.updateOne({title: 'title 02'}, {$set: {desc: '好看的'}})

有些时候我们不是想增加文档中的字段,而是想删除文档中的字段可以使用$unset,比如我现在想删除文档中的’desc‘

db.movies.updateOne({title: 'title 02'}, {$unset: {desc: true}})

针对于数组类型的操作:

$push 对数组项进行添加,如果文档的字段不存在,那么就创建
 
db.movies.updateOne({title: 'title 02'}, {$push: {keywords: '好看的'}})
$each 对数组项同时添加多个,如果文档的字段不存在,那么就创建
 
db.movies.updateOne({title: 'title 02'}, {$push:{keywords: {$each: ['有意思的', '好玩的']}}})
top n 数组只能包含n个item
$addToSet 防止添加重复的项
$pull 删除所有的匹配项

update中的upsert选项可以让我们找不到与更新条件匹配的文档时,创建一个新的文档

db.movies.updateOne({title: 'title 03'}, {$set: {desc: 'desc 03'}}, {upsert: true})

6.查找

查找movies集合中year为2025的文档

db.movies.find({year: 2025})

查找movies集合中year大于2000,小于3000的文档

db.movies.find({year: {$gt: 2000, $lt: 3000}})

查找movies集合中year大于等于2000,小于等于3000的文档

db.movies.find({year: {$gte: 2000, $lte: 3000}})

对应表:

$lt 小于
$lte 小于等于
$gt 大于
$gtl 大于等于
$eq 等于
$ne 不等于

多个条件满足某一个使用OR查询

使用$in

db.movies.find({year: {$in: [null, 2025]}}) // 查找year为null或者2025的文档

使用$nin

db.movies.find({year: {$nin: [null]}}) // 查找year不为null的文档

对于条件中出现多个字段的情况下可以使用$or

db.movies.find({$or: [{year: 2025}, {title: 'title 03'}]}) // 查找year为2025或者title为‘title 02’的文档

使用$not取反查询

db.movies.find({year: {$not: {$eq: 2025}}})

使用$all查询数组字段

db.movies.find({keywords: {$all: ['好玩的']}})

使用$size查询满足长度的数组字段的文档

db.movies.find({keywords: {$size: 2}})

功能超级强大的$where,使用它你的逻辑灵活性可以大大提高,它允许你执行任意javascript代码(生产慎用)

db.movies.find({$where: function() {return this.year === 2025}}) // 查找year等于2025的文档

对查询进行分页

db.movies.find().limit(10) //查询集合中的前10个文档

7.索引

如果把一个集合比作一本书,那么索引就是书本的目录。如果没有索引,你想查找任何内容都需要从头到尾翻阅,如果有索引,你只需要查看索引就能知道内容的位置。

使用createIndex创建索引

db.movies.createIndex({title: 1})

使用多个索引查询,mongo会根据你创建索引的字段和你使用的查询条件选择其中用到的有索引的字段分多线程查询,看哪个索引所在的线程查询的最快返回数据

8.在node中使用mongo

都说mongo和node是绝配,那么如何在node中使用mongo呢

初始化,安装mongoose

npm init -y
npm i mongoose

在mongoose中可以定义schema,mongoose会根据schema帮我们做数据映射,让我们更好操作mongo

const mongoose = require('mongoose')
mongoose.connect('mongodb://127.0.0.1:27017/video') // 连接到mongo server

const moviesSchema = new mongoose.Schema({ // 定义movies schema
    title: String,
    desc: String,
    keywords: [String],
    year: Number
})

const moviesModel = mongoose.model('Movies', moviesSchema) //定义model


;(async () => {
    try {
        const data = await moviesModel.find() // 查找数据
        console.log(data)
    } catch {

    } finally {
        await mongoose.disconnect() // 关闭连接
    }
    
})()

执行脚本,输出:

--

标签:基本,title,mongodb,year,db,movies,文档,使用,find
From: https://www.cnblogs.com/xiaomactx/p/17364650.html

相关文章

  • latex 使用图片加入脚注
    \begin{figure}[H]\centering\includegraphics[scale=0.8]{Quantization}\caption{对称量化与非对称量化对比图\protect\footnotemark[1]}\label{Quantization}\end{figure}\footnotetext[1]{https://blog.csdn.net/sexyluna/article/details/127542146}修改https://blog.......
  • 使用爬虫利器 Playwright,轻松爬取抖查查数据
    使用爬虫利器Playwright,轻松爬取抖查查数据我们先分析登录的接口,其中url有一些非业务参数:ts、he、sign、secret。然后根据这些参数作为关键词,定位到相关的js代码。最后,逐步进行代码的跟踪,发现大部分的代码被混淆加密了。花费了大半天,来还原这些混淆加密的代码,但是也没......
  • matlab学习1(基本操作、stringchar、矩阵运算、基础图)
    1.matlab简介matlab是矩阵实验室,数据是以矩阵的形式存在。2.基本操作1).直接在命令行输入指令2).在脚本文件章编写程序后运行脚本文件:存放代码的文件,尾缀:.m实时脚本文件界面方便,将结果实时显示在代码旁边(可以加代码,图片,类似于一个文档编辑器,很推荐使用)3).在函数文......
  • SpringMVC使用注解开发
    1.编写web.xml(模板代码)ViewCode2.导入springmvc的context和mvc两个依赖,通过context标签可以自动扫描识别包"com.lian.controller"下的所有注解,两个mvc标签是默认配置;context和mvc分别替代了之前的处理器映射器HandleMapper和处理器适配器HandlerAdapter;视图解析器拼接要要跳转......
  • typeScript声明文件的一个注意点:不能使用导入导出语法
    一、起因使用vue3+ts在写一个demo的时候,用到路由模块的时候,觉得需要自定义一个类型声明,所以写了一个.d.ts声明文件,而这个文件写完的时候,发现vscode老是提示找不到类型声明。 起初,我以为是ts配置文件写错了,没有在include里面写入这个文件,ts察觉不到。但是后来改来改去发现还是......
  • 阿里云oss使用案例
    上传文件privatefinalAliyunOssPropertiesaliyunOssProperties;privatefinalClientBuilderConfigurationconfig; publicstaticOSSgetOssClient(AliyunOssPropertiesaliyunOssProperties,ClientBuilderConfigurationconfig){returnnewOSSClientBuilder(......
  • python+playwright 学习-58 Jenkins上使用 Pipeline 运行 playwright 自动化脚本
    前言Dockerfile.focal可用于在Docker环境中运行Playwright脚本。这些镜像包括在Docker容器中运行浏览器所需的所有依赖项,还包括浏览器本身。playwright在linux系统上目前只支持Ubuntu系统的部分版本,centos和debian系统上是没法运行的。jenkins环境准备需安装2个跟docke......
  • [C#]中String、String[]、List<string>相互转换及string成员substring、split简单使用
    一、相互转换1.String>String[]Strings="a,b,c,d,e";String[]sArray=s.Split(',');2.String[]>Stringstring[]sArray={"a","b","c","d","e"};strings=String.Join(",&quo......
  • 使用docker快速安装minio
    1.拉取minio镜像dockerpullminio/minio2.docker容器构建和运行miniodockerrun-d--nameminio\--restart=always\-p9000:9000\-p9001:9001\-e"MINIO_ROOT_USER=minioroot"\-e"MINIO_ROOT_PASSWORD=minioroot"\-v/home/mi......
  • postgres-earthdistance模块使用
    一、快速安装pg+postgis使用docker安装dockerpullmdillon/postgis:latestdockerrun--namepostgresql-d-p5432:5432-v/home/pgdata:/var/lib/postgresql/data-ePOSTGRES_PASSWORD=123456-eALLOW_IP_RANGE=0.0.0.0/0mdillon/postgis:latest##如果碰到ipv4未开......