二、MongoDB入门

news2024/11/24 12:58:22

文章目录

  • 一、MongoDB入门
    • 1、常用操作
      • 1.1 INSERT
      • 1.2 Query
      • 1.3 Update
      • 1.4 Remove
      • 1.5 aggregate
        • 1.5.1 插入数据
        • 1.5.2 统计sum
        • 1.5.3 常见的聚合表达式
      • 1.6 索引

一、MongoDB入门

1、常用操作

1.1 INSERT

> db.User.save({name:'zhangsan',age:21,sex:true})
> db.User.find()
{"_id": Objectld("4f69e680c9106ee2ec95da66"), "name": "zhangsan", "age": 21,
"sex": true}

_id组合

Objectld是、id”的默认类型。Objectld使用12字节的存储空间,每个字节二位十六进制数字, 是一个24位的字符串
在这里插入图片描述

  1. 时间戳:时间不断变化的

  2. 机器:主机的唯_标识码。通常是机器主机名的散列值,这样可以确保不同主机生成不同的Objectld ,不产生冲突。

  3. PID:为了确保在同一台机器上并发的多个进程产生的Objectld是唯一的,所以加上进程标识符(PID).

  4. 计数器:前9个字节保证了同一秒钟不同机器不同进程产生的Objectld是唯一的。 后3个字节就是一个自动增加的计数器,确保相同进程同一秒产生的Objectld也是 不一样。同一秒最多允许每个进程拥有IS 777 2托个不同的Objectld。

1.2 Query

1、WHERE

# select * from User where name = 'zhangsan'
> db.User.find({name:"zhangsan"})

2、FIELDS

# select name, age from User where age = 21
> db.User.find({age:21}, {'name':1, 'age':1})

3、SORT

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

# select * from User order by age
> db.User.find().sort({age:1})

4、SUCE

在 MongoDB 中使用 limit()方法来读取指定数量的数据,skip()方法来跳过指定数量的数据

# select * from User skip 2 limit 3
> db.User.find().skip(0).limit(3)

5、IN

# select * from User where age in (21, 26, 32)
> db.User.find({age:{$in:[21,26,32]}})

6、COUNT

# select count(*) from User where age >20
> db.User.find({age:{$gt:20}}).count()

7、0R

# select * from User where age = 21 or age = 28
> db.User.find({$or:[{age:21}, {age:28}]})

1.3 Update

可直接用类似T-SQL条件表达式更新,或用SaveO更新从数据库返回到文档对象。

# update Userset age = 100, sex = 0 where name = 'user1'
> db.User.update({name:"zhangsan"}, {$set:{age:100, sex:0}})

Update()有几个参数需要注意。

db.collection.update(criteria, objNew, upsert, mult)

criteria:需要更新的条件表达式

objNew:更新表达式

upsert:如FI标记录不存在,是否插入新文档。

multi:是否更新多个文档。

1.4 Remove

removeO用于删除单个或全部文档,删除后的文档无法恢复。

> db.User.remove(id)
//移除对应id的行
> db.User.remove({})
//移除所有

1.5 aggregate

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)

1.5.1 插入数据

>db.article.insert({
    title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by_user: 'runoob.com',
   url: 'http://www.runoob.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
})
>db.article.insert({
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'runoob.com',
   url: 'http://www.runoob.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 10
})
>db.article.insert({
   title: 'Neo4j Overview', 
   description: 'Neo4j is no sql database',
   by_user: 'Neo4j',
   url: 'http://www.neo4j.com',
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
})

1.5.2 统计sum

现在我们通过以上集合计算每个作者所写的文章数

# select by_user, count(*) from article group by by_user
> db.article.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

{
"result" : [
      {
"_id" : "runoob.com",
"num_tutorial" : 2
      },
      {
"_id" : "Neo4j",
"num_tutorial" : 1
      }
   ],
"ok" : 1
}

在上面的例子中,我们通过字段 by_user 字段对数据进行分组,并计算 by_user 字段相同值的总和。

1.5.3 常见的聚合表达式

表达式描述实例
$sum计算总和。db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { s u m : " sum : " sum:"likes"}}}])
$avg计算平均值db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { a v g : " avg : " avg:"likes"}}}])
$min获取集合中所有文档对应值得最小值。db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { m i n : " min : " min:"likes"}}}])
$max获取集合中所有文档对应值得最大值。db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { m a x : " max : " max:"likes"}}}])
$push在结果文档中插入值到一个数组中。db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : { p u s h : " push: " push:"url"}}}])
$addToSet在结果文档中插入值到一个数组中,但不创建副本。db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : { a d d T o S e t : " addToSet : " addToSet:"url"}}}])
$first根据资源文档的排序获取第一个文档数据。db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", first_url : { f i r s t : " first : " first:"url"}}}])
$last根据资源文档的排序获取最后一个文档数据db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", last_url : { l a s t : " last : " last:"url"}}}])

1.6 索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

>db.User.createIndex({"name":1})

语法中 name值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可

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

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

相关文章

linux(inode)学习

目录: 1.认识磁盘结构 2.没有被打开的文件在磁盘里是怎么保存的 ------------------------------------------------------------------------------------------------------------------------------ 如果一个文件没有被打开,这个文件在哪里呢&#…

卡方检验.医学统计实例详解

卡方检验是一种常用的假设检验方法,通常用于分析两个或多个分类变量之间的关系。在医学研究中,卡方检验被广泛应用于分析两种或多种治疗方法的疗效,或者分析某种疾病的发病率与某些危险因素之间的关系。下面我们来看一个卡方检验在医学实例中…

虚幻商城模型转MetaHuman

一、导入虚幻商城的模型到UE 1.去虚幻商城下载一个人物模型,这里以SchoolGirl为例 2.导入UE,并找到模型,这里是SkeletalMesh 二、启动MetaHuman插件 1.通过Edit->Plugins启用MetaHuman和MetaHumanSDK插件,这里MetaHuman插件是用于创建MetaHuman的,MetaHumanSDK插件…

基于高效率IP路由查找的内容

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 实现最基本的前缀树查找,调研并实现某种IP前缀查找方案,- 基于forwarding-table.txt数据集(Network, Prefix Length, Port) - 本实验只考虑静态数据集,不考虑表的添加或更新- 以前缀树查找结果为基准,检…

代码随想录算法训练营day46 | 139.单词拆分 ,多重背包,背包问题总结篇!

代码随想录算法训练营day46 | 139.单词拆分 ,多重背包,背包问题总结篇! 139.单词拆分解法一:动态规划(不好想)解法二:回溯记忆化 多重背包解法一:转化为01背包 背包问题总结递推公式…

软考中级数据库系统工程师-第6-7章 数据库技术基础关系数据库

1.数据库系统基本概念 1)数据库系统(DBS)是一个采用了数据库技术,有组织地、动态地存储大量相关联数据,方便多用户访问的计算机系统。广义上来讲,DBS是由数据库、硬件、软件和人员组成。 2)数据库(DB):数…

centos 8 安装 jdk8

去官网下载RPM软件包 下载地址:https://www.oracle.com/java/technologies/downloads/#java8 上传到服务器指定路径,进行安装 rpm -ivh jdk-8u371-linux-x64.rpm 配置JAVA_HOME环境变量 查找jdk安装路径 java -verbose修改系统环境变量文件 vi /e…

软件工程还是网络安全专业好

这个问题需要根据个人的兴趣和职业规划来选择。 从兴趣方面来看,如果你对计算机系统的设计和开发更感兴趣,那么选择软件工程专业可能更适合你。如果你对计算机系统的安全性更感兴趣,那么选择网络安全专业可能更适合你。 从职业规划方面来看…

Kyligence 连续入选 Gartner 揭秘服务自助式分析的语义层报告

近日,全球权威的技术研究与咨询公司 Gartner 发布了《揭秘服务自助式分析的语义层》(Demystifying Semantic Layers for Self-Service Analytics) 研究报告。Kyligence 是国内唯一连续入选此报告的厂商,此前曾入选 Gartner 指标平台创新洞察报告、数据管…

Gitlab----Gitlab-runner简介

【原文链接】Gitlab----Gitlab-runner简介 gitlab-runner是用于执行GitlabCI/CD任务的工具,通俗点来说它就是用来执行gitlab上的CI/CD任务的机器,当然这里的机器是广义上的,它可以是物理机、虚拟机、Docker甚至是Kubernetes。 GitLab Runne…

分布式实战教程13:ruoyi-vue-pro开发指南

文章目录 前言一、入门必读1、简介2、项目地址3、技术选型(1)技术架构图(2)后端(3)前端 4、功能列表5、内置功能6、快速启动(1)克隆代码(2)Apifox 接口工具&a…

chatgpt赋能Python-pythondic

Python Dict - Python中最有用的数据结构之一 当谈到Python的数据结构时,Python字典(Python Dict)是最常用和最有用的数据结构之一。Python字典是一个非常强大且多才多艺的数据结构,它不仅易于学习和使用,而且可以大大…

chatgpt赋能Python-pythonforin

Python for-in循环及其应用 作为一门通用编程语言,Python具备众多操作的能力。在Python中,for-in循环是最常用的循环语句之一。它对于遍历列表,元组,字典或集合等结构非常有用。在本文中,我们将探讨Python for-in循环…

大数据面试题总结

1.说一下最近做的项目 (1)我把实时简单说了一下,说的一般 2.说一说为什么要数仓分层 (1)把维度建模随便说了下,又扯了一下分层 3.说一下数据倾斜 (1)没回答好,hive只说了groupby flink说了一下keyby的三种情况 4.说一下hive小文件问题 1.介…

【Java】IDEA 配置java开发环境(windows)

刚才需要临时运行一个java脚本,java还是2、3年前学的,都忘光了。IDEA 2021还在我电脑装着,进去却忘记了怎么配置java环境,这里复习一下。 文章目录 01 安装 JDK1.1 下载与安装1.2 配置环境变量 02 在IDEA中运行java程序 01 安装 J…

大量名片图片转excel表格文件怎么转?有什么好办法?

随着市场经济的发展和社交交往的频繁,名片作为有效沟通方式,优雅和高效地传递个人或公司信息的同时,时常成为人们忙碌生活的问题之一:对于一个拿到的名片,我们需要将它收藏或转录至手机、电脑等媒介记录,但…

系统设计基础-大型网站通用架构模式

文章目录 一.何谓模式二.通用架构模式1.分层2.分割3.分布式4.集群5.缓存6.异步处理7.冗余备份8.自动化9.安全 本文主要参考自《大型网站技术架构:核心原理与案例分析》一书第二章节和其他网络文章,如有遗漏或错误,还望海涵并指出。谢谢&#…

基于PSO的无线传感器网络CH选择算法(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 CH(Contraction Hierarchies)算法是 Robert Geisberger、Peter Sanders、Dominik Schultes及Daniel Delling于2008年发布的&…

js中的类

1、构造函数与类 class Person{// 构造函数// 构造函数在调用类,实例化对象时调用constructor(name,age){console.log(构造器被调用了!);console.log(name,age);// 在构造函数中,this表示当前所创建的对象// this.name对象的属性&#xff0c…

简单说明芯片的启动过程和程序执行过程

目录 1.芯片启动过程 2.启动代码 2.1 堆栈定义 2.2 向量表 2.3 复位程序 2.4 中断服务程序 3. 程序执行的过程 4.数据的存取 1.芯片启动过程 芯片启动是上电后先运行芯片内部的固有程序(也就是启动代码)。启动代码程序建立完运行环境之后&#x…