mongodb基本操作命令

news/2024/4/25 19:26:23

mongodb快速搭建及使用

  • 1.mongodb安装
    • 1.1 docker安装启动mongodb
  • 2.mongo shell常用命令
    • 2.1 插入文档
      • 2.1.1 插入单个文档
      • 2.1.2 插入多个文档
      • 2.1.3 用脚本批量插入
    • 2.2 查询文档

前言:本篇默认你是对nongodb的基础概念有了了解,操作是非常基础的。但是与关系型数据库的类比默认你已经是了解的。

1.mongodb安装

这里为了快速使用mongodb,我使用了docker安装(如果想了解linux上面的安装可以参考我的另一篇文章《mongdb下载、安装、启动》)。

1.1 docker安装启动mongodb

#拉取mongo镜像
docker pull mongo:4.4.10
#运行mongo镜像
docker run --name mongo-server -p 29017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=root\
-e MONGO_INITDB_ROOT_PASSWORD=root\
-d mongo:4.4.10 --wiredTigerCacheSizeGB 1

默认情况下,Mongo会将wiredTigerCacheSizeGB设置为与主机总内存成比例的值,而不考虑你可能对容器施加的内存限制。
MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD都存在就会启用身份认证(mongod --auth)

#进入容器
docker exec -it mongo-server  bash
#进入Mongo shell
mongo -u root-p root

2.mongo shell常用命令

命令说明
show dbs/show databases显示数据库列表
use 数据库名切换数据库,如果不存在创建数据库
db.dropDatabase()删除数据库
show collections/show tables显示当前数据库的集合列表
db.createCollection(“集合名”)创建集合
db.集合名.stats()查看集合详情
db.集合名.drop()删除集合
show users显示当前数据库的用户列表
show roles显示当前数据库的角色列表
db.createUser({user:“用户名”,pwd:“用户密码”,roles:[“角色”]})创建管理员
db.dropUser(“用户名”)删除用户
show profile显示近发生的操作
load(“xxx.js”)执行一个JavaScript脚本文件
exit /quit()退出当前shell
help查看mongodb支持哪些命令
db.help()查询当前数据库支持的方法
db.集合名.help()显示集合的帮助信息
db.version()查看数据库版本

2.1 插入文档

2.1.1 插入单个文档

  • insertOne: 支持writeConcern
db.collection.insertOne(<document>,{writeConcern: val}
)

writeConcern 决定一个写操作落到多少个节点上才算成功。writeConcern 的取值val包括:
0: 发起写操作,不关心是否成功;
1: 集群最大数据节点数:写操作需要被复制到指定节点数才算成功;
majority: 写操作需要被复制到大多数节点上才算成功

db.emps.insertOne({x:22,y:12},{writeConcern:0})

在这里插入图片描述

  • insert: 若插入的数据主键已经存在,则会抛 DuplicateKeyException 异常,提示主键重复,不保存当前数据
db.emps.insert({x:11,y:22})

在这里插入图片描述

  • save: 如果 _id 主键存在则更新数据,如果不存在就插入数据
db.emps.save({_id:ObjectId("65674b35fc0731432f162147"),x:12,y:21})

在这里插入图片描述

2.1.2 插入多个文档

  • insertMany:向指定集合中插入多条文档数据
db.collection.insertMany([ <document 1> , <document 2>, ... ],{writeConcern: <document>,ordered: <boolean>      }
)

writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
ordered:指定是否按顺序写入,默认 true,按顺序写入。

db.emps.insertMany([{x:23,y:23},{x:33,y:33}],{writeConcern:0,ordered:true})

在这里插入图片描述

2.1.3 用脚本批量插入

# 退出mongo shell
exit
# docker容器内部也是一个小型的linux环境
# 更新依赖
apt-get update  
# 安装vim命令
apt-get install vimcd /data/db/
vim books.js
# 以下内容粘贴在books.js中
var tags = ["nosql","mongodb","document","developer","popular"];
var types = ["technology","sociality","travel","novel","literature"];
var books=[];
for(var i=0;i<50;i++){var typeIdx = Math.floor(Math.random()*types.length);var tagIdx = Math.floor(Math.random()*tags.length);var favCount = Math.floor(Math.random()*100);var book = {title: "book-"+i,type: types[typeIdx],tag: tags[tagIdx],favCount: favCount,author: "xxx"+i};books.push(book)
}
db.books.insertMany(books);
# 进入mongo shell
mongo -u root -p root
# 加载js文件
load("books.js")

在这里插入图片描述

2.2 查询文档

db.collection.find(query, projection)

query :可选,查询的条件
projection :可选,使用投影操作符指定返回的键。默认省略:查询时返回文档中所有键值。_id为1的时候,其他字段必须是1;_id是0的时候,其他字段可以是0;如果没有_id字段约束,多个其他字段必须同为0或同为1。

# 只指定查询条件 tag=nosql
db.books.find({tag:"nosql"})
# 指定查询条件 且 指定title,author不展示
db.books.find({tag:"nosql"},{title:0,author:0})
# 指定查询条件 且 只展示title,author
db.books.find({tag:"nosql"},{title:1,author:1})

在这里插入图片描述

# 指定查询条件 且 只展示title,author,隐藏_id
db.books.find({tag:"mongodb"},{type:1,author:1,_id:0})
# 同时指定0和1仍然会报错
db.books.find({tag:"mongodb"},{type:0,author:1,_id:0})
# 指定查询条件 且 指定title,author不展示,隐藏_id
db.books.find({tag:"mongodb"},{type:0,author:0,_id:0})
# 指定查询条件 且 指定title,author不展示,不隐藏_id
db.books.find({tag:"mongodb"},{type:0,author:0,_id:1})

在这里插入图片描述
查询条件对照表

SQLMQL
a=1{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}}

查询逻辑对照表

SQLMQL
a=1and b=1{a:1,b:1}或{$and:[{a:1},{b:1}]}
a=1or b=1{$or:[{a:1},{b:1}]}
a is null{a: {$exists: false}}
a in (1, 2, 3){a:{$gte:1}}
a<1{a:{$in:[1,2,3]}}
# 查询条件 type=travel 且 favCount > 40
db.books.find({type:"travel",favCount:{$gt:40}})
# 查询条件 type=travel 且 favCount > 40
db.books.find({$and:[{type:"travel"},{favCount:{$gt:40}}]})
# 查询条件 type=travel 或者 favCount > 40
db.books.find({$or:[{type:"travel"},{favCount:{$gt:40}}]})

在这里插入图片描述


https://www.xjx100.cn/news/3118746.html

相关文章

芯片及设计制造 - 小记

文章目录 关于芯片制造材料 芯片分类ASICASSPSoCFPGA可编程SoC或SoC FPGA微处理器&#xff08;μP 或 MPU&#xff09;微控制器&#xff08;μC 或 MCU&#xff09; 芯片设计和制造过程&#xff1a;需求 & 方案架构设计架构验证形式验证/属性检查 前端设计RTL 设计逻辑综合…

【论文学习】机器学习模型安全与隐私研究综述

机器学习在数据层、模型层以及应用层面临的安全和隐私威胁&#xff0c;呈现出多样性、隐蔽性和动态演化的特点。 应用领域&#xff1a;计算机视觉、自然语言处理、语音识别等 应用场景&#xff1a;自动驾驶、人脸识别、智慧医疗等 Key words: machine learning; poisoning atta…

后端Java日常实习生面试(七牛云2023年11月14日)

面试岗位为&#xff1a;Java 后端开发实习生 面试时长&#xff1a;60分钟 面试时间&#xff1a;2023年11月14日 首先做一下简单的自我介绍吧面试官说先来说一下 Java 基础吧 多态了解吗&#xff1f;&#xff08;了解&#xff0c;一个行为有不同的表现形式&#xff09; 知道…

ffmpeg 把mp4文件中某段视频转成gif文件

一 缘起背景&#xff1a; 有视频文件转gif动图的需求&#xff1b;网上下载的转换工具需要注册会员、否则带水印&#xff0c;还限制时长。 二 工具环境&#xff1a; win10 下 dos 操作 ffmpeg 三 操作命令&#xff1a; ffmpeg -i test.mp4 -ss 00:01:01 -t 00:00:19 -vf &q…

版本控制系统Git学习笔记-Git基本知识介绍

目录 前言一、版本控制系统1.1 什么是版本控制系统1.2 本地版本控制系统1.3 集中化的版本控制系统1.3 分布式版本控制系统 二、Git简介2.1 数据处理方式2.2 几个特点2.2.1 几乎所有操作都是本地执行2.2.2 Git保证完整性2.2.3 Git一般只添加数据 2.3 Git中文件状态2.3.1 三种文件…

orvibo旗下的VS30ZW网关分析之一

概述 从官网的APP支持的智能中枢来看,一共就两种大类: MixPad系列和网关系列 排除MixPad带屏网关外,剩余的设备如下图: 目前在市场上这四种网关已经下市,官方已经宣布停产。所以市场上流通的也几乎绝迹。 从闲鱼市场上可以淘到几个,拿来分析一下,这里我手头有如下的两…

大数据Hadoop-HDFS_架构、读写流程

大数据Hadoop-HDFS 基本系统架构 HDFS架构包含三个部分&#xff1a;NameNode&#xff0c;DataNode&#xff0c;Client。 NameNode&#xff1a;NameNode用于存储、生成文件系统的元数据。运行一个实例。 DataNode&#xff1a;DataNode用于存储实际的数据&#xff0c;将自己管理…

Linux下各种字符编码进行转码

支持各种编码相互转换 具体 iconv --list 可以查看 支持的转码格式 1.代码实现 #include <iostream> #include <iconv.h> #include <cstring>int iconv_convert(const char *inCharset, const char *outCharset, char *inbuf, unsigned int inlen, char *o…