Mongodb学习笔记速记(一)

MongoDB高手课学习笔记(一,再入门) 这是极客时间-MongoDB高手课的学习笔记,第一章:再入门. 按照数据库排名网站db-engines.com的统计,最近几年MongoDB一直保持在前四五名,前面几位是年龄30多岁的关系型数据库(Oracle,Mysql,SQLServer,PostgreSQL). 阅读详情

一.   安装mongodb

1.      下载地址: https://www.mongodb.org/dl/win32/mongodb-win32-i386-v3.0-latest.zip

2.      在D盘新建文件夹 mongodb,复制解压后的文件到这里

3.      把mongodb文件夹的路径追加到系统变量path后面

4.      在D盘新建一个文件夹命名为mongodbData,用于存放mongodb的数据

5.      把开cmd,进入mongodb文件夹下的bin,运行:  mongod –dbpathd:\mongodbData

6.      获得端口号27017, 安装完毕

二.   启动mongodb

1.      建立快速启动文件mongodb.bat

d: && mongod--dbpath D:\MongodbData

2.      新建数据库

建立快速文件 mongodb27017.bat

mongo127.0.0.1:27017/admin

创建新数据库 use [databasename]  如: use foobar

给指定数据库添加集合并添加记录 db.[documentName].insert({…})

db.persons.insert({name:”uspcat”})

db表示本数据库,persons为集合

3.      查看数据库 show dbs

4.      查看所有文档 show collections  //persons(新创建)    system.indexes (系统生成,负责存储索引)

5.      查找指定文档数据db.[documentName].find()       

//查询第一条 db.[documentName].findOne()

db.system.indexes.find()  

//db.persons.find()

6.      更新文档db.[documentName].update({查询条件},{更新内容})  ///$set 修改器

db.persons.update({name:”extjs4.0”},{$set:{name:”extjs4.1”}})

7.      删除文档db.[documentName].remove({要删除的对象})

db.persons.remove({age:1})

8.      删除库中的集合 db.[documentName].drop()

db.persons.drop()

9.      删除数据库db.dropDatabase()

10.  Shell的help 

全局数据库db.help() 

集合 db.[documentName].help()

11.  数据库和集合命名规范

不能是空字符串

不得含有 ‘ ‘ (空格) 、‘,` % / \ 和空字符

应全部小写

最多64个字节

数据库名不能和现有系统保留库同名, 如 admin, local, config

12.  例外合法的命名(避免使用)

db-text 但是不能能过db.[documentName]得到,要改用db.getCollection(documentName),因为会被当作是减法操作

db.getCollection(“db-text”).text.insert({name:”mick”})

13.  内置js引擎,可以直接执行js(任何)代码

Function insert(object){

            db.getCollection(“db-text”).text.insert(object)

}

Insert({age:32})

使用eval

db.eval(“return  ‘uspcat’”)

 

三.   增删改查

1.      插入文档db.[documentName].insert({})

db.persons.insert({_id:”001”,name:”yun”})

2.      批量插入文档(shell不支持批量插入, 要用for循环完成或者mongo驱动)

for(vari=0;i<10;i++){

            db.persons.insert({name:i})

}

3.      save操作 ( 当插入时遇到_id相同的情况,insert会报错,而用save则会变成更新操作,把_id对象的内容替换.

db.persons.save({_id:”001”,name:i})

4.      删除列表中所有数据db.[documentName].remove()

集合的本身和索引不会被删除: show collections  /db.system.indexes.find()

5.      根据条件删除(删除指定的数据 db. [documentName].remove(条件))

db.persons.remove({_id:1}))

(如果集合中要删除的很多,建议删除正合集合再重新建立)

6.      强硬的文档代换式更新操作(会用新的文档替换旧文档)

db.[documentName].update({查询器},{修改器})

(如替换后的_id和现有的_id冲突,系统将报错)

7.      update的第三个参数 insertOrUpdate , 查询器能查出来就更新,查不出来就插入

db.[documentName].update({查询器},{修改器},true)

8.      批量更新操作 当查出多条数据时默认修改第一条数据,如要实现批量修改,需要第四个参数 db.[documentName].update({查询器},{修改器},false,true)

四.   修改器

1.      $set 用来指定一个键值,如果已存在就修改否则添加{$set{field:value}}

db.persons.update({name:4},{$set:{name:”uspcat”}})

2.      $inc 只使用于数字类型, 他可以为指定的键对应的数字类型的数值进行加减操作{$inc:{field:value}}

db.persons.update({age:27},{$inc:{age:1}})   ////{“_id”:0“, age”:28}

3.      $unset 删除指定的键 {$unset:{field:1}}

db.persons.update({age:28},{$unset:{age:1}})

4.      $push 如指定的键是数组则追加,否则中断报错,如果不存在则创建数组 {$push:{field:value}}

db.persons. update({_id:5},{$push:{books:”JS”}})

5.      $pushAll 批量添加数组数据, 用法与$push类似 {$pushAll:{field:array}}

db.persons.update({_id:5},{$pushAll:{books:[“EXTJS”,”JS”]}})

6.      $addToSet 往指定键值的数组添加, 当目标数组存在则不操作,不存在则添加 {$addToSet:{field:value}}

{$addToSet:{books:”JS”}}

7.      $pop 从指定数组删除一个值  1 表示删除最后一个值, -1表示删除第一个值{$pop:{field:value}}

{$pop:{name:1}}

8.      $pull 删除被指定的值 {$pull:{field:value}}

{$pull:{“book”:”JS”}}

9.      $pullAll 一次性删除多个指定的数值 {$pullAll:{field:arry}}

{$pullAll:{“name”:[“JS”,”JAVA”]}}

10.  数组定位器($) 如值内有多个数组,只想操作一部份

{name:”YFC”,age:27,books:[{type:”JS”,name:”EXTJS4”},{type:”JS”,name:”JQUERY”}]}

要向type为JS的文档增加一个作者 author:USPCAT

db.text.update({“books.type”:”JS”},{$set:{“books.$.author”:”USPCAT”}})

 

上面提到的修改器,都是放在对象的前面{$set:{“books.$.author”:”USPCAT”}},后面要学的查询器是放到对象内层

 

11.  批量数组更新 $addToSet与 $each结合db.text.update({_id:100},{$addToSet:{books:{$each:[“JS”,”DB”]}}})

$each会循环后面的数组把每一个数值进行$addToSet操作

12.  内存分配与查询效率

Document被创建的时候,DB为其分配内存和预留内存,当修改操作不超过预留内存的时候,速度非常快,如果超过了则会分配新的内存而消耗时间.

五.   mongoDB的特殊函数 (runCommand函数专门用于执行特殊函数)

1.      findAndModify 特殊函数,用于返回update或remove后的文档,一次只能处理一个文档,也不能执行upsert操作,只能更新已有文档.

runCommand({“findAndModify”:”processes”,query:{查询器},sort{排序},new:true}).value///update:{更新器},remove:true

          

           ps=db.runCommand({

                    “findAndModify”:”persons”,         //指定数据集合

                    “query”:{“name”:”text”},           //查询对象,只能针对单文档

                    “update”:{“$set”:{“email”:”1221”}},  //修改器

                    “new”:true                      //

}).value

Do_something(ps)

 

 

 

 

 

 

 

 

六.   查询

1.      指定返回的键

db.[documentName].find({条件},{键指定})

数据准备->persons.json

查询所有数据的指定键(name,age,country)

db.persons.find({},{name:1,age:1,countru:1,_id:0})   // 1表示查询, 0表示不查

2.      查询条件 (为空表示不限条件)

$lt      <   {age:{$gte:22,$lte:27}}  ///大于等于22,小于等于27

$lte    <=

$gt     >

$gte    >=

$ne     !=   {age:{$ne:26}}

 

db.persons.find({age:{$gte:25,$lte:27}},{_id:0,name:1,age:1})  //查询年龄在25至27之间

db.persons.find({country:{$ne:”Korea”}},{_id:0,m:1})         //查询不是韩国的学生的数学成绩

3.      $in 或 $nin (包含或不包含)

db.persons.find({country:{$in:[“USA”,”China”]}})          //查询中国和美国的学生

db.persons.find({country:{$nin:[“USA”,”China”]}})         //查询非中国和美国的学生

4.      $or查询

db.persons.find({$or:[{cn:{$gt:85}},{en:{$gt:90}}]},{_id:0,e:1,c:1,name:1})

//查询语文成绩大于85 或者英语成绩大于90的学生

5.      null 查询此项为null的信息

db.persons.find({sex:{$in:[null]}},{_id:0,name:1,sex:1})

//查询性别为null的学生

6.      使用正则查询

db.persons.find({name:/li/i},{_id:0,name:1})  //查询名字中存在li的学生

7.      $not 可以用在任何地方进行取反操作

db.persons.find({name:{$not:/li/i}},{_id:0,name:1})

//$not和$nin的区别是,$not可以用在任何地方,$nin只用在集合上

8.      数组查询$all和index应用

//查询所有喜欢MONGODB和JS的学生

db.persons.find({books:{$all:[“MONGODB”,”JS”]}},{books:1,_id:0})

//查询第二本书是JAVA的信息

db.persons.find({“books.1”:”JAVA”},{_id:0,name:1})

9.      查询指定长度数组$size, 不能与比较查询符一起使用()

//查询喜欢书籍数量为4本的学生

db.persons.find({books:{$size:4}},{_id:0,name:1})

//查询喜欢书籍大于3本的学生

//1.增加字段用于统计

db.persons.update({},{$set:{size:4}},false,true)

//2.改变书籍的更新方式,每次增加书籍时,size加1

db.persons.update({name:”jim”},{$push:{books:”ORACLE”},$inc:{size:1}})

//3.利用$gt查询

db.persons.find({size:5},{_id:0,name:1,sex:1})  //db.persons.find({size:{$gt:3}})

 

//利用shell查询Jim喜欢看的书的数量

var persons =db.persons.find({name:”Jim”})  //多个

while(persons.hasNext()){                                      //遍历邮标

            obj=persons.next();

            print(obj.books.length)

}

 

Shell是个彻底的JS引擎,但是一些特殊的操作要靠各个驱动来完成(JAVA,NODEJS)

 

10.  $slice操作符返回文档中指定数组的内部值

//查询Jim书架中第二至四本书

db.persons.find({name:”Jim”},{books:{$slice:[1,3]},_id:0})

//查询最后一本书

db.persons.find({name:”Jim”},{books:{$slice:-1},_id:0})

11.  文档查询

为Jim添加学习简历文档 jim.json

//查询出在K学校上过学的学生

//问题1 局限,用绝对匹配可以完成,完全匹配,查询顺序也要一致

db.persons.find({school:{school:”K”,score:”A”}},{_id:0,school:1})

//问题2 顺序问题可以用 对象”.” 的方式定位,但是会附带数组内其他元素的查询score

db.persons.find({“school.score”:”A”,”school.school”:”K”},{_id:0,school:1})

//正确做法,使用单条条件组查询$elemMatch,会将查询条件当成一个组合,进行遍历,只有满足组合所有条件的

db.persons.find({school:{$elemMatch:{school:”K”,score:”A”}}},{_id:0,school:1})

12.  $where 查询复杂信息,万能查询,但是会消耗性能,尽量减少使用

//查询年龄大于22岁,喜欢看C++书,在K学校上过学的学生

db.persons.find({“$where”:function(){

           //得到查询文档的每一条文档

           var books=this.books;

           //得到文档中的school对象

           var school=this.school;

           if(this.age>22){

                    var php=null;

                    //遍历书籍

                    for(var i=0;i<books.length;i++){

                             if(books[i]==”C++”){

                                      php=books[i];

                                       //如果学校为真

                                      if(school){

                  for(varj=0;j<school.length;j++){

                            //判断是否在K上过学

                            if(school[j].school==”K”){

                                     return true;

}

}

break;

}

}

}

}

}})

MongoDB学习笔记(一) Linux下MongoDB的安装和配置 一、MongoDB简介   MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C++开发。Mongo的官方网站地址是:http://www.mongodb.org/,读者可以在此获得更详细的信息。   NoSql,全称是 Not Only Sql,指的是非关系型的 阅读详情

相关推荐

mongodb学习笔记

启动mongodb通过mongod启动mongodb服务 mongod参数选项[root@primary bin]# ./mongod –help -h [ --help ] 帮助信息 --version 版本信息 -f [ --config ] arg 配置文件选项 -v [ --verbose ] 提高内部报告标准输出或记录到l

张小秋博客 3583

MongoDB 原子操作——findAndModify()函数

MongoDB 原子操作 mongodb不支持事务,所以,在你的项目中应用时,要注意这点。无论什么设计,都不要要求mongodb保证数据的完整性。 但是mongodb提供了许多原子操作,比如文档的保存,修改,删除等,都是原子操作。 所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。 原子操作数据模型 考虑下面的例子,图...

_夜渐凉 8329

用HFSS仿真平面线圈的电感量

平面线圈是指在平面上绕制而成的线圈,如PCB上的电感线圈、无线供电使用的金属丝绕制而成的线圈等。根据线圈的不同形状可将平面线圈分为方形线圈,六角形线圈、八角形线圈、螺旋原型线圈等。

johnboat的专栏 1万+

MongoDB的原子操作findAndModify和findOneAndUpdate

本文主要介绍MongoDB的原子操作findAndModify和findOneAndUpdate。

一起学习 2872

GitHub 镜像站点

国内访问 GitHub 有时会遇到速度慢或不稳定的情况,这时 GitHub 镜像站点就能帮上忙。它们通过代理或缓存机制,让你更顺畅地浏览仓库、下载资源甚至克隆代码。希望这些信息能帮你更顺畅地访问 GitHub 资源。下面表格汇总了一些常见的镜像站及其主要用途。

BillKu的博客 6万+

从零开始:TexLive(Latex)安装与配置全指南

本文提供了一份详尽的TexLive(Latex)安装与配置全指南,旨在帮助用户从零开始快速搭建LaTeX工作环境。内容涵盖从镜像下载、安装步骤详解、环境验证到高效编辑器(如VS Code)配置,并特别强调了中文排版支持与宏包管理,确保用户能顺利处理学术论文等专业文档的排版需求。

weixin_29284885的博客 903

mongodb示例_MongoDB findAndModify()示例

mongodb示例MongoDB findAndModify() method modifies and returns a single document based upon the selection criteria entered. The returned document does not show the updated content by default. If the rec...

从零开始的教程世界 3789

OpenSpec 从入门到精通:AI 时代的最佳 SDD 范式

同样都是「先写规范再写代码」的开源 SDD 框架,OpenSpec(https://github.com/fission-ai/openspec) 展现出了极高的工程性价比,无论是使用 Claude Code、Cursor 还是 Aider,都可以无缝接入 OpenSpec 的规格管理层。这些问题需要人来做判断,AI 做不了这个主。整个流程跑下来,OpenSpec 产出的效果还是令人满意的,一些前期没有考虑到的细节 AI 都补上了,生成的相关文档也有利于开发人员的知识对齐,可以尝试在团队内部推广。

qq_39093474的博客 926

使用mongodb的findAndModify命令来进行数据同步

一、问题定义: 由于业务需求,需要实现给一条记录分配一个int值的不重复id,由于是多实例部署的服务,所以如何进行数据同步,避免插入重复id成为关键。 二、解决过程: 1.一开始想到的是,当系统初始化的时候,读取mongo库,找到当前最大的id值,加载到内存,然后多线程之间通过AtomicInteger 进行调用,获取下一个要使用的id值。这样,虽然单实例可以很好的工作,并发也没有问题。但是...

1497

西门子S7通信协议TSAP配置全攻略:从默认值到自定义修改(附各型号对照表)

本文深入解析西门子S7通信协议中TSAP配置的核心原理与实战方法。针对S7-200/300/400/1200/1500等主流PLC型号,提供了默认TSAP对照表,并详细阐述了如何根据机架号和插槽号计算或自定义Remote TSAP。文章结合常见连接失败案例,给出了系统化的排错流程,旨在帮助工程师快速打通S7通信链路,提升工业自动化现场调试效率。

weixin_29163797的博客 278

C++控制台实现简单的注册登录

C++控制台实现简单的注册登录 #include<iostream> #include<string> #include <vector> #include <conio.h> void Display();//调用display显示switch()界面 void Register();//注册 void Enter();//登录 using nam...

乔路非 2万+

SpringBoot中基于MongoDB的findAndModify原子操作实现分布式锁原理详解

findAndModify是MongoDB提供的一个强大的命令,它可以同时查询和更新文档,并且这个操作是原子的。这意味着在findAndModify命令执行期间,没有其他客户端可以修改被查询的文档,直到该命令完成。这种原子性特性使得findAndModify非常适合用于实现分布式锁。

码到三十五 1万+

华为od 面试八股文_前端_01_含答案

华为od 面试八股文_前端_01_含答案

MISAYAONE的博客 2748

MongoDB学习笔记(一)

虽然在TTMS这个项目中,我已经使用了MongoDB数据库,但是我觉得我还不是很了解它,所以在项目结束的第一天,我打算重新认识MongoDB一.认识MongoDBNoSQLNoSQL(Not Only SQL,非关系型数据库),主要特点是非关系型的,分布式的,开源的,水平可扩展的。关系型数据库,我目前只使用过MySQL,SQL Server,但是关系型和非关系型两种在使用的时候的差别就比较明显了No

Dear_Mr的博客 1298

【txt文本加密】使用 cryptography 库实现加密和解密

cryptography 库是一个强大的 Python 库,用于实现加密和解密功能。它提供了各种加密算法,包括对称加密、非对称加密、哈希函数等。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2667

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

mongodb 学习笔记

Mongo是一个基于分布式文件存储的Nosql数据库。支持的数据结构非常松散,可以通过json格式来修改插入数据。

wangqiang996的博客 1157

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Mongodb使用学习笔记(一)

文章目录MongoDB使用学习笔记1. MongoDB安装2. MongoDB使用 MongoDB使用学习笔记 1. MongoDB安装 环境:centos 7.x Linux平台安装MongoDB 2. MongoDB使用 (1)MongoDB的启停 启动: 停止: 重启: (2)进入MongoDB命令行 安装MongoDB的bin目录下包含两个文件:mongo和mongod ./mongo (2) (3) ...

daxiandan的博客 1321

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MongoDB学习笔记一:MongoDB基础

目录 MongoDB是什么? 学了有什么用? MongoDB入门 安装 修改数据库位置 MongoDB的启动方式 MongoDB的图形化工具 MongoDB基本命令 增 查询 ...

蜀云泉 576

MongoDB学习笔记

NoSQL=Not Only SQL,⽀持类似SQL的功能, 与Relational Database相辅相成。其性能较⾼,不使⽤SQL意味着没有结构化的存储要求(SQL为结构化的查询语句),没有约束之后架构更加灵活。NoSQL数据库四⼤家族 列存储 Hbase,键值(Key-Value)存储 Redis,图像存储 Neo4j,⽂档存储 MongoDBMongoDB 是⼀个基于分布式⽂件存储的数据库,由 C++ 编写,可以为 WEB 应⽤提供可扩展、⾼性能、易部署的数据存储解决⽅案。

olive 1836

MongoDB学习笔记(一)——MongoDB简介

MongoDB数据库是一种可扩展的敏捷NoSQL数据库,它是基于文档存储模型。在这种模型下,数据会被存储为文档,而不是我们熟知的例如MySQL、Oracle等的行和列的存储。文档是以BSON对象的形式存储。 MongoDB旨在实现一个高性能、高可用、可自动扩展的数据存储,MongoDB因为速度快、可扩展性强、易于实现、为需要存储用户评论、博客和其他内容的网站提供了极佳的后端存储解决方案: 面...

落尘 1194

MongoDB学习笔记(一) MongoDB介绍及安装

MongoDB学习笔记(一) MongoDB介绍及安装

yczhouhy的专栏 690

MongoDB私人学习笔记

将数据进行分片,由多个服务器来分别承担分片数据,通过路由计算规则来觉得存储的数据所在的分区位置,故客户端对数据的读写操作,可能分到不同的片区由不同的服务器来处理,达到了负载均衡的能力,但是如果有个别片区的服务宕机了,那么就无法提供这一片区的数据服务,没有容灾备份的能力。OR条件: db.mycoll.find({$or:[{title:"mongo"},{state:"ok"}]}) 查询title="mongo" OR state="ok"的数据。

奕辰杰的博客 693

MongoDB 学习笔记(入门看这一篇足矣)

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。旨在为WEB应用提供可扩展的高性能数据存储解决方案。百度百科介绍从上面的描述可以得知MangoDB 由 c++ 编写,运行效率自然不低分布式文件存储系统开源数据库系统,谁都可以用一个 MongoDB 可以建立多个数据库MongoDB 的默认数据库是 “”db” ,该数据库存储在 data 目录中。

2501_90254378的博客 899

Java最新面试之MongoDB(1),原创Kafka学习笔记

它是当前备份集群(replica set)中负责处理所有写入操作的主要节点/成员。在一个备份集群中,当失效备援(failover)事件发生时,一个另外的成员会变成 primary。Seconday 从当前的 primary 上复制相应的操作。它是通过跟踪复制 oplog()做到的。关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。Java基础部分算法与编程数据库部分。

wsjh156456的博客 821
上一篇: Js数组的操作push,pop,shift,unshift等方法
下一篇: Mongodb学习笔记速记(二)
阿榄
博客等级 码龄18年 31粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值