首先我们要知道SQL是什么,结构化查询语言,也是一种高级语言,就像js和java一样,也是一种独立的语言。一开始,我以为它只是一个同义词,一个概念,但现在我意识到我错了。1、数据类型MongoDB中存储的数据类型为BSON(Binary-json)二进制JSON数据。2、与SQL编写的数据库相比,MongoDB是NOSQL的代表数据库,而不仅仅是SQL。MongoDB中存储的数据类型是BSON(Binary-json)二进制JSON数据。简单点说,它更像是一种面向对象的写法,让有其他面向对象语言基础的程序员能够以较低的成本学习。比如现在某学校要统计所有年级所有班级的所有老师和学生的姓名和性别。如果用SQL来统计,就好像在电脑桌面上新建了一个文件夹,文件夹层层嵌套。如果我打开学校文件夹,就会有一年级,二年级。这样的结构:学校-->一年级/二年级/-->(打开一年级的文件夹)班级1/班级2/班级3--->(公开课1)-->Teacher/Student-->(selectteacher)-->Physicsteacher/Chineseteacher...等表连接相当于这样的表嵌套了一层,mongoDB是一个对象嵌套对象:这里先说一句话??:我们学习mongo,首先要搞清楚它的概念。首先启动服务器并告诉数据库存储它的位置。服务器可以存放多个数据库,数据库就像一个学校。数据库中存储的是集合,类似于数组。(这不是废话,认真的)并且文档存储在集合中。是最终的数据。集合相当于学校的班级,文档相当于每个班级的学生。启动mongoDB服务器,打开mongoshell,shell的意思和你的bash和zhr是一样的,直接对应用程序底层进行操作,但是bash和zhr的对象是整个电脑,mongoshell仅适用于蒙戈。在这个shell上输入相关命令,不是操作服务器,而是操作数据库。
3.mongoDB的基本命令关于如何安装我之前的文章都有详细的讲解,这里不再赘述。1.显示所有数据库:showdbs(showdatabases)的简写2.usexxx(数据库名)我这里以学校为例,在mongoShell中输入usegrade,会切换到grade数据库。这里可能会有疑问?我还没有创建这个数据库,为什么可以直接使用呢?这是mongo的一个特性。当你使用use命令时,如果数据库存在,就会切换到这个数据库。如果数据库不存在,它会自动为你临时生成。为什么叫临时呢?因为只有当数据库开始存储集合和文档时,它才会真正生成并存储在服务器上。这时候再用showdbs,我们发现成绩还没有放到服务器上。3.db命令这个命令可以显示你现在在哪个数据库,类似于bashzsh的pwd命令4.showcollections查看数据库中有多少个集合,也就是查看类中有多少个类学校数据库4.增删改查CRUD相关操作,一个数据库最基本的功能就是增删改查。C:create,R:read,U:update,D:delete但具体操作不是这几个字。1.添加:添加一条新数据db.collection.insert(doc)useschool然后db.grade.insert({name:"韩振芳",age:"18"})db代表当前数据库,grade为collectionsetName,插入的是我们的文档。注意,这时候我们再查看一下db的数量,你会发现上面出现了school。尝试showcollections同时插入多个对象,以数组[{},{}]的形式插入一个或多个对象,其功能与insert()相同,只是语义更清晰。2.检查:查询数据db.collection.find()如果不自己设置_id属性值,那么mongo会自动配置一个唯一的id值,并且必须带下划线。Mention:你可能会觉得肯定有db.find(),collection.find(),我只能告诉你,showdbsshowcollections你看了不会忘记了吧?还不赶紧自己敲?find(arguments)find也可以接受参数,参数是一个对象,返回值是一个数组!注意这里和js中的array.find()不同。js的find返回第一个满足条件的属性和值,返回一个键值对对象。在mongo中,这个条件会查询所有的name属性值。韩振方的,然后返回,即使结果中只有一个文档满足条件,也需要用[index]调用里面的属性,有点像document.getElementByClassName()和document.querySelectorAll()的味道。findOne()查询方法的返回值是一个键值对对象,可以直接调用里面的方法。类似于document.querySelector()3.变化:准确的说是更新db.grade.update()这个方法接受两个参数,一个是查询条件对象,一个是新对象。请注意,第二个是一个新对象,而不是单个属性。我们正常的逻辑是,你这么用,把名字改成小芳就行了,其他的不用管。但它实际执行的是将整个对象名称:“韩依依”替换为以下对象。那么我们如何才能达到我们真正想要完成的目标呢?这里我们需要用到:“修改运算符”$set比如我要修改第一个数据,把名字改成:韩寒韩,其他数据不变。上面第一行代码是$set:{}的用法。与set相反,$unset:{}表示删除某个文档对象中的某个属性。补充:update()默认只会修改文档中第一个满足搜索条件的文档对象,$set:{}修饰符不只是修改,如果搜索条件是name:"韩振芳"和$set:{grade:"3"},但是我没有这个属性,那么set会自动将这个属性扩展到这个文档对象:ds.collection.updateMany和ds.collection.unpdateOne4。删除removeb.collection.remove()它接受文档的属性对象作为参数,它可以有第二个参数。下面说说只有一个参数的默认情况。现在我有两条数据叫xx,我remove({name:"xx"}),你先根据上面的增改判断,是删除一条还是多条?按照我们上面的逻辑,它必须只删除第一个!它没有。它删除所有符合条件的。如果只想删除一个,有两种方法。1.使用db.collection.deleteOne(),别问为什么不用removeOne()我也在想!2.或者增加第二个参数removeremove({name:"xx"},ture)第二个参数是onlyOne的boolean属性,补充:还有db.collection.deleteMany()是remove条件的默认值.如果remove({})传递一个空数组,集合中的所有文档都会被删除,但是!!!请注意,但集合仍然存在!内存中还有这个变量的位置,这个方法的底层逻辑是将文档对象一个一个删除,而不是一次性全部清除。如果确实需要删除某个集合,建议直接db.collection.drop(),会删除整个集合,也就是说内存中不存在这个变量。提示:没有db.drop()方法可以删除数据库。该方法有其独有的方法。使用db.deleteDatabase()和db.colection.drop()时,如果这个collection是数据库中的最后一个,默认会清空内存中的数据库地址,相当于删除整个数据库。