MongoDB Shell 基本命令(一)

MongoDB Shell 基本命令(一)

1. 基本概念

SQL术语/概念MongoDB术语/概念解释/说明
databasedb数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

2. 文档的基本数据结构

  • 文档的基本结构:{ : , : {}, … }

    • 封闭符 {}

    • 分隔符 ,

    • 连接符 :

    • 键的数据类型:UTF-8字符,可以用”“引起来,如”name“

      • 的用户命名规则:

        (1)‘_id’ 为保留字段key

        (2) 禁止使用’$'符号

        (3) 禁止使用’.'符号

        (4) 避免同一个{}中使用重复的

    • 值的数据类型:MongoDB支持的任意数据类型

    示例一:

    { "_id" : 1, "name" : "Zhang San" }
    

    示例二:

    { "_id" : ObjectId("5e746c62040a548ab32fff13"),  //ObjectId对象"name" : "Zhang San",  // 字符串"age" : 18,			   // 数字(Double)"alive" : true,        // 布尔值"hobbies" : ["Anime","Comic","Game", 19, false,[1,2,3],{a:1}],  // 数组"body": {"height" : 170,"weight" : 65},                             // Object 内嵌文档"courses" : [{ "coursename" : "nosql" },{ "coursename" : "mysql" },{ "coursename" : "python" },{ "coursename" : "linux" },{ "coursename" : "kettle" }]								   // 内嵌文档的数组
    }
    
  • MongoDB的基本数据类型

数据类型描述
String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean布尔值。用于存储布尔值(真/假)。true/false = 1/0
Double双精度浮点值。用于存储浮点值。
Min/Max keys将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Arrays用于将数组或列表或多个值存储为一个键。[]
Timestamp时间戳。记录文档修改或添加的具体时间。Timestamp()
Object用于内嵌文档。{}
Null用于创建空值。
Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID对象 ID。用于创建文档的 ID。
Binary Data二进制数据。用于存储二进制数据。
Code代码类型。用于在文档中存储 JavaScript 代码。
Regular expression正则表达式类型。用于存储正则表达式。

3. 数据库(db)

// 查看当前服务器上的数据库
show dbs;
show databases;// 选择名为mydb的数据库(如果没有则隐式创建)
use mydb;// 查看当前使用的数据库
db;// 查看当前数据库的统计信息,由于没有插入相关信息,基本上为空值
db.stats();// 查看当前数据库的操作信息,返回当前正在执行的操作
db.currentOp();// 删除当前数据库
db.dropDatabase();

4. 集合(collection)

// 查看当前数据库中的集合
show collections;
show tables;// 创建一个名为mycoll的集合
db.createCollection("mycoll");// 重命名mycoll集合,新集合名叫mycollection
db.mycoll.renameCollection("mycollectioin")// 清空一个名为mycollection的集合 
db.mycollection.remove({});// 删除一个名为mycollection的集合 如果数据库没有任何集合时,数据库会被自动删除。
db.mycollection.drop();

4.1 添加文档到集合

insert() 方法

注意:db.collection中,collection为你要操作的集合的名称

db.collection.insert(<document or array of documents>,{multi: false}
)
insertOne() 方法

添加一条文档记录

db.collection.insertOne(<document>{}
)
insertMany() 方法

添加多条文档记录 ([]方括号表示数组)

db.collection.insertMany([ <document 1> {} , <document 2> {}, ... ]  --jsonArray
)

添加一条文档记录{“lastname”:“zhang”, “firstname”:“ren”}到集合mycollection

db.mycollection.insert({"lastname":"zhang", "firstname":"san"});
//返回id,比较好用,直接得到结果,进一步获取到ObjectID
db.mycollection.insertOne({"lastname":"zhang", "firstname":"san"});
var result = db.mycollection.insertOne({"lastname":"zhang", "firstname":"san"});
var newdoc_id = result.insertedId
//可以通过find()命令查找,如果不使用bson格式会报什么错误?
db.mycollection.find({_id:newdoc_id})//通过id找到对应信息

添加一个文档记录对象mydoc到集合mycollection, 使用insert或insertOne方法

var mydoc = {"lastname":"Zhang", "firstname":"San"};
db.mycollection.insert(mydoc);
// 3.2版后新的方法:insertOne
db.mycollection.insertOne(mydoc);

添加多条记录到集合mycollection,使用insert或insertMany方法

// 多条文档记录,用数组[]进行组合,用逗号分隔
db.mycollection.insert(
[{"lastname":"Zhang", "firstname":"san", "role":"teacher", "teacher_id":"2023409", "title":"教师", "courses":[{"coursename":"nosql"},{"coursename":"sqlserver"}]},{"lastname":"Zhang", "firstname":"San", "role":"student", "student_id":"2022000000", "grade":"2022", "class":"1", "score":80}
]
);

添加一个文档数组mydocs(多条文档的数组)到集合mycollection,使用insert或insertMany方法

// 多条文档记录用[]组合到一个数组mydocs中。
// 注意 coursename处于两个花括号中,属于两个内嵌的文档,不算重复的键
var mydocs = [{"lastname" : "Zhang","firstname" : "San","role" : "teacher","teacher_id" : "2023409","title" : "教师","courses" : [{ "coursename" : "nosql" },{ "coursename" : "mysql" },{ "coursename" : "python" },{ "coursename" : "linux" },{ "coursename" : "kettle" }]},{"lastname" : "Zhang","firstname" : "Yi","role" : "student","student_id" : "2022000001","grade" : "2022","class" : "1","score" : 80},{"lastname" : "Tan","firstname" : "Er","role" : "student","student_id" : "2022000002","grade" : "2022","class" : "1","score" : 70}
];
db.mycollection.insertMany(mydocs);
// 3.2版后新的方法:insertMany

4.2 查询文档记录

find() 方法
db.<collection>.find(<querydocument>, <projection>)
db.<collection>.findOne(<querydocument>, <projection>)select <projection> from <collection> where <querydocument>
select student_id from mycollection where score > 70;
db.mycollection.find({"score":{$gt:70}},{student_id:1});
// 查询集合mycollection中的文档
db.mycollection.find();// 将查询结果"漂亮化",只在终端有用
db.mycollection.find().pretty();// 查询集合mycollection中键为role, 值为student的文档记录
db.mycollection.find( {"role" : "student"} );// 将查询条件写入文档对象ceriteria查询
var criteria = { "role" : "student" };
db.mycollection.find(criteria);// 使用内嵌对象的字段值查询
db.mycollection.find({"courses.coursename":"mysql"})

汇总操作

//1.创建数据库
//use 使用数据库,如果这个数据库不存在就创建
use cqust
db = db.getSiblingDB("cqust")
//Note:刚才创建的数据库看不到,没有显示,因为只是创建了一个名字,在创建集合前没有文件生成
//2.查看数据库名
show databases;
//可以简写为:
show dbs;
//3.集合(collection)可以显示的创建,执行完该条语句,便创建了cqust数据库,以及集合
//也可以不显示创建
db.createCollection("collectionname");
//4.在集合中插入文档
//数据库操作命令: db.集合名.集合操作(参数...)
//构造文档JSON 重复字段自动过滤掉
//db.集合名.insert(文档对象)
//db.集合名.insert(文档列表对象)
//构造文档JSON 重复字段自动过滤掉
var doc={"姓名":"张三",性别:"男",学号:"2023409",课程:"分布式数据库原理",成绩:90,学号:"2023409"};
db.collectionname.insert(doc)

课堂练习:

1.创建学号+姓名(拼音)的数据库
2.创建data集合并查看该集合
3.在data集合中插入个人信息,包括:学号、姓名、性别、家庭地址、今天的所有课程等信息
4.通过find()查看刚才插入的信息,要求参数是insertedId
5.清空集合,删除集合,删除数据库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐算法的学习

文章目录 前言1、模型1.1 从本领域模型的发展历史中学习1.1.1 在历史中总结发展规律和趋势1.1.2 发现模型之间的共性&#xff0c;方便记忆 1.2 从其他领域的发展中学习1.2.1 注意力机制1.2.2 残差网络 1.3 实践该怎么办&#xff1f; 2、 特征2.1 数据源的选择与建立2.2 特征构造…

Python生成随机密码脚本

引言 在数字化时代&#xff0c;密码已成为我们保护个人信息和数据安全的重要手段。然而&#xff0c;手动创建复杂且难以猜测的密码是一项既繁琐又容易出错的任务。幸运的是&#xff0c;Python编程语言为我们提供了一种高效且灵活的方法来自动生成随机密码。本文将详细介绍如何…

android app执行shell命令视频课程补充android 10/11适配-千里马android

(https://blog.csdn.net/learnframework/article/details/120103471) https://blog.csdn.net/learnframework/article/details/120103471 hi&#xff0c;有学员在学习跨进程通信专题课程时候&#xff0c;在实战app执行一个shell命令的项目时候&#xff0c;对课程本身的android …

【高等数学】无穷级数

0. 了解 无穷级数是指将无穷多个数按照一定的规律相加起来的表达式。 打个比方,就像你有一个无穷长的梯子,每一级梯子代表一个数。把这些数一个一个加起来,就形成了无穷级数。 比如常见的等比级数,这里是首项,是公比。如果,这个等比级数是收敛的,也就是它的和是一个有限…

Hackmyvm-Lookup

0x00信息收集 0x01端口扫描 PORT STATE SERVICE 22/tcp open ssh 80/tcp open http MAC Address: 08:00:27:0A:44:CF (Oracle VirtualBox virtual NIC)22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)80/tcp open http Apache ht…

数据权限的设计与实现系列13——前端筛选器组件Everright-filter集成多控制维度实现

‍ 数据权限多维度实现 上面的所有工作&#xff0c;实际都是基于业务实体属性这一数据权限控制维度展开的。 接下来&#xff0c;我们来设计与实现多维度&#xff0c;主要是用户组&#xff08;即角色&#xff09;、组织机构和用户。 ‍ 业务需求分析 用户控制维度 业务场景…

【MATLAB代码】指纹定位方法(KNN)介绍与例程(二维、轨迹定位),源代码可复制粘贴到MATLAB上运行

文章目录 指纹定位指纹定位技术简介基本原理位置估算公式1. 最近邻居算法(KNN)2. 加权最近邻居算法(W-KNN)3. 最小二乘法(LS)最终位置 P P P通过求解下面的方程获得:应用场景优缺点优点缺点总结源代码代码运行运行方法运行结果指纹定位 指纹定位技术简介 指纹定位是一…

SpringBoot日常:封装redission starter组件

文章目录 逻辑实现POM.xmlRedissionConfigRedissionPropertiesRedissionUtilsspring.factories 功能测试application.yml配置POM.xmlTestController运行测试 本章内容主要介绍如何通过封装相关的redission连接配置和工具类&#xff0c;最终完成一个通用的redission starter。并…

洛谷 P1038 [NOIP2003 提高组] 神经网络(拓扑排序)

题目传送门 感觉这道题需要我们高超的语文阅读水平…… 解题思路 我们发现要计算一个细胞的状态值&#xff08;&#xff09;&#xff0c;就需要先算出有边指向它的其他细胞对答案的贡献&#xff1b; 这是有拓扑序的&#xff0c;所以我们想到拓扑排序。 题目中说了&#xff0…

FastDFS单节点部署

FastDFS单节点部署 1、FastDFS入门1.1 分布式文件系统1.2 FastDFS 简介1.3 FastDFS 发展历史1.4 FastDFS 整体架构1.5 FastDFS 线上使用者 2、FastDFS 环境搭建2.1 FastDFS 安装2.1.1 安装前的准备2.1.2 安装 libfastcommon库2.1.3 安装 FastDFS 2.2FastDFS 配置2.2.1 去掉/etc…

即使是编程新手,也能利用ChatGPT编写高质量的EA

在外汇交易领域&#xff0c;MetaTrader是一款备受欢迎的交易软件&#xff0c;包括MT5和MT4&#xff0c;提供了众多强大的分析工具和自动化交易功能。对于没有编程经验的新手而言&#xff0c;编写专家顾问&#xff08;EA&#xff09;可能显得既复杂又令人望而却步。幸运的是&…

数据结构——链表,哈希表

文章目录 链表python实现双向链表复杂度分析 哈希表&#xff08;散列表&#xff09;python实现哈希表哈希表的应用 链表 python实现 class Node:def __init__(self, item):self.item itemself.next Nonedef head_create_linklist(li):head Node(li[0])for element in li[1…

spring6 IoC容器详解

目录 一、引言 示例开发 示例分析 启用Log4j2日志框架 使用方式 二、IoC容器 IoC容器 1.控制反转&#xff08;IoC&#xff09; 2.依赖注入 3.IoC容器在Spring的实现 基于XML管理Bean 依赖注入之setter注入 依赖注入之构造器注入 Bean生命周期 基于xml自动装配 …

基于SSM+微信小程序的打印室预约管理系统(打印2)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的打印室预约管理系统实现了管理员和用户两个角色。 1、管理员功能有个人中心&#xff0c;用户管理&#xff0c;附近打印店管理&#xff0c;文件打印管理&#xff0c;当…

ui自动化知识点-web端

UI : User Interface( ⽤户接⼝ - ⽤户界⾯ ) ,主要包括: app 、 web ui ⾃动化测试:使⽤⼯具或代码执⾏⽤例的过程 什么样的项⽬适合做⾃动化:1、需要回归测试项⽬(甲⽅⾃营项⽬、⾦融、电商)2、需求变动不频繁:稳定的模块3、项⽬周期⻓的项⽬:(甲⽅⾃营项⽬、6个…

YOLO11改进 | 主干网络 | 将backbone替换为Swin-Transformer结构【论文必备】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 本文给大家带来的教程是将YOLO11的backb…

LaTeX教程(016)-LaTeX文档结构(16)

LaTeX教程(016)- LaTeX \LaTeX LATE​X文档结构(16) 接上一讲 我们前面知道&#xff0c;\vref是对\ref的升级&#xff0c;而varioref包也提供了一个对\pageref升级的命令\vpageref。它和\vref的原理很相似&#xff0c;内置了一些判断。 \vpageref[same-page][other-page]{ke…

【C++】C++当中的复合类型——引用和指针

C当中的复合类型 最近开始系统地学习 C 的语法&#xff0c;参考的主要资料来自于 C Primer 第五版&#xff0c;对于学习过程中所遇到的较难理解的点&#xff0c;我会以blog的形式对问题和内容进行记录&#xff0c;并进行进一步地探讨。 这一部分的内容对应于参考资料 C Prime…

spring-cloud-alibaba-nacos-config2023.0.1.*启动打印配置文件内容

**背景&#xff1a;**在开发测试过程中如果可以打印出配置文件的内容&#xff0c;方便确认配置是否准确&#xff1b;那么如何才可以打印出来呢&#xff1b; spring-cloud-alibaba-nacos-config 调整日志级别 logging:level:com.alibaba.cloud.nacos.configdata.NacosConfigD…

Linux操作系统与windows无法相互复制问题

请先看完此文在进行操作&#xff01;&#xff01;&#xff01; 对于无法复制我们逐层分析&#xff1a; 1.为什么无法复制是不是少了什么工具(open-vm-tools-destop) 上网查阅可以看到如下 2.在此之前我的虚拟机装完Ubuntu 16.04的linux系统无法进行apt update(参考一下) li…