主页
关于
Stay before every beautiful thoughts
在每一个美好的思想前停留
文章
>
学习笔记
>
正文
MongoDB 基本操作
MongoDB
数据库
Created at 2021-07-16 23:23
# 创建数据库 ``` # 语法 # 有就切换 没有就创建 use DATABASE_NAME ``` # 打印数据库列表 ``` show dbs ``` ** MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。** # 删除数据库 ``` # 先切换到 要删除的数据库下 use test_chen # 在删除数据库 db.dropDatabase() ``` <br /> ---- <br /> # 打印集合列表 ``` show collections ``` # 创建集合 ** db.createCollection(name, options) ** 在命令中, name 是要创建的集合的名称. Options 是一个文件,用于指定配置的集合 |参数 |类型 |描述| |:-----:|:-----:|:-----:| |Name| String | 要创建的集合名称| |Options| Document |(可选)指定有关内存大小和索引选项| 选项参数是可选的,所以只需要到指定的集合名称。以下是可以使用的选项列表: |字段 |类型| 描述| |:-----:|:-----:|:-----:| |capped | Boolean| (可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当它达到其最大大小。如果指定true,则需要也指定尺寸参数。| |autoIndexID |Boolean | (可选)如果为true,自动创建索引_id字段的默认值是false。| |size |number | (可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。| |max |number | (可选)指定封顶集合允许在文件的最大数量。| 当插入文档,MongoDB 第一检查大小字段封顶集合,然后它会检查最大的字段中。 ``` # 切换数据库 use test_chen # 创建集合(不带参数) db.createCollection("mycollection") # 创建集合(带参数) db.createCollection("mycol", { capped : true, autoIndexID : true, size : 6142800, max : 10000 } ) # 插入数据的时候 如果不存在改集合 会自动创建 集合 db.yiibai.insert({"name" : "yiibai"}) 如果 yiibai 集合不存在 则自动创建 ``` # 删除集合 ``` # 语法 db.COLLECTION_NAME.drop() # 删除 名为yiibai的集合 db.yiibai.drop() ``` <br /> ---- <br /> # 数据类型 ``` String : 这是最常用的数据类型来存储数据。在MongoDB中的字符串必须是有效的UTF-8。 Integer : 这种类型是用来存储一个数值。整数可以是32位或64位,这取决于您的服务器。 Boolean : 此类型用于存储一个布尔值 (true/ false) 。 Double : 这种类型是用来存储浮点值。 Min/ Max keys : 这种类型被用来对BSON元素的最低和最高值比较。 Arrays : 使用此类型的数组或列表或多个值存储到一个键。 Timestamp : 时间戳。这可以方便记录时的文件已被修改或添加。 Object : 此数据类型用于嵌入式的文件。 Null : 这种类型是用来存储一个Null值。 Symbol : 此数据类型用于字符串相同,但它通常是保留给特定符号类型的语言使用。 Date : 此数据类型用于存储当前日期或时间的UNIX时间格式。可以指定自己的日期和时间,日期和年,月,日到创建对象。 Object ID : 此数据类型用于存储文档的ID。 Binary data : 此数据类型用于存储二进制数据。 Code : 此数据类型用于存储到文档中的JavaScript代码。 Regular expression : 此数据类型用于存储正则表达式 ``` <br /> ---- <br /> # 查询文档 ### find() 方法 ``` # 语法 db.COLLECTION_NAME.find() # 例子 db.test_chen.find() ``` find() 方法将在非结构化的方式显示所有的文件。 ### pretty() 方法 结果显示在一个格式化的方式,可以使用 pretty() 方法. ``` # 语法 db.mycol.find().pretty() #例子 db.mycol.find().pretty() # 输出 { "_id": ObjectId(7df78ad8902c), "title": "MongoDB Overview", "description": "MongoDB is no sql database", "by": "tutorials yiibai", "url": "http://www.yiibai.com", "tags": ["mongodb", "database", "NoSQL"], "likes": "100" } ``` 除了 find() 方法之外,还有一个 **findOne()** 方法,它只返回一个文档。 ### RDBMS Where子句和MongoDB等同语句 |操作 | 语法| 例子| RDBMS 等同| |:-----:|:-----:|:-----:| |Equality| {<key>:<value>} |db.mycol.find({"by":"tutorials yiibai"}).pretty() |where by = 'tutorials yiibai'| |Less Than |{<key>:{$lt:<value>}} |db.mycol.find({"likes":{$lt:50}}).pretty() |where likes < 50| |Less Than Equals |{<key>:{$lte:<value>}}| db.mycol.find({"likes":{$lte:50}}).pretty() |where likes <= 50| |Greater Than |{<key>:{$gt:<value>}} |db.mycol.find({"likes":{$gt:50}}).pretty() |where likes > 50| |Greater Than Equals | {<key>:{$gte:<value>}} | db.mycol.find({"likes":{$gte:50}}).pretty() |where likes >= 50| |Not Equals |{<key>:{$ne:<value>}} | db.mycol.find({"likes":{$ne:50}}).pretty() |where likes != 50| ### AND 在MongoDB中用法 在 find() 方法,如果通过多个键分离',',那么 MongoDB 处理 AND 条件。AND 基本语法如下所示: ``` # 语法 db.mycol.find({key1:value1, key2:value2}).pretty() # 例子 # 下面给出的例子将显示所有的教程,标题是“MongoDB Overview“ db.mycol.find({"by":"tutorials yiibai","title": "MongoDB Overview"}).pretty() # 对于上面给出的例子相当于where子句 ' where by='yiibai' AND title='MongoDB Overview' , 可以通过任意数量的键值对在 find 子句。 ``` ### MongoDB中OR OR条件的基础上要查询文件,需要使用**$or**关键字。OR 基本语法如下所示: ``` # 语法 db.mycol.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty() # 例子 db.mycol.find({ $or:[ {"by":"yiibai"}, {"title": "MongoDB Overview"} ] }).pretty() ``` ### AND 和 OR 一起使用 下面给出的例子将显示有像的文件大于100,其标题是“MongoDB Overview'或者是'yiibai' 。 等效于 SQL where子句 为 'where likes>10 AND (by = 'yiibai' OR title = 'MongoDB Overview')' ``` db.mycol.find({ "likes": {$gt:10}, $or: [ {"by": "yiibai"}, {"title": "MongoDB Overview"} ] }).pretty() ``` <br /> ---- <br /> # 插入文档 要插入数据到 MongoDB 集合,需要使用 MongoDB 的 **insert()** 或 **save()** 方法。 ### insert() 方法 ``` # 语法 db.COLLECTION_NAME.insert(document) # 例子 db.test_one.insert({ title: 'test', description: 'testestest', by: 'chenxiaomo', url: 'http://www.baidu.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }) # 插入多条 db.post.insert([ { title: 'MongoDB Overview', description: 'MongoDB is no sql database', by: 'tutorials yiibai', url: 'http://www.yiibai.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { title: 'NoSQL Database', description: 'NoSQL database doesn't have tables', by: 'tutorials yiibai', url: 'http://www.yiibai.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 20, comments: [ { user:'user1', message: 'My first comment', dateCreated: new Date(2013,11,10,2,35), like: 0 } ] } ]) # save 方法同上 ``` <br /> ---- <br /> # 更新文档 MongoDB的 **update()** 和 **save()** 方法用于更新文档的集合。 **update()方法更新现有的文档值,而替换现有的文档通过的文件中 save() 方法。** ### update()方法 **更新**符合条件的文档 ``` # 语法 db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } ) ``` **参数说明:** - **query **: update的查询条件,类似sql update查询内where后面的。 - **update **: update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的 - **upsert ** : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。 - **multi ** : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 - **writeConcern ** :可选,抛出异常的级别。 ### Save() 方法 **替换**符合条件的文档 ``` # 语法 db.collection.save( <document>, { writeConcern: <document> } ) # 例子 db.mycol.save( { "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai New Topic", "by":"Yiibai" } ) ``` ### 更多实例 ``` # 只更新第一条记录: db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); # 全部更新: db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); # 只添加第一条: db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); # 全部添加加进去: db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); # 全部更新: db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true ); # 只更新第一条记录: db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false ); ``` <br /> ---- <br /> # 删除文档 ### remove() 方法 ``` # 语法 db.collection.remove( <query>, <justOne> ) # 2.6 后的语法 db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } ) ``` **参数说明:** - **query **:(可选)删除的文档的条件。 - **justOne **: (可选)如果设为 true 或 1,则只删除一个文档。 - **writeConcern ** :(可选)抛出异常的级别。 ``` # 删除指定条件的 db.col.remove({'title':'MongoDB 教程'}) # 删除指定条件的 并且 指定删除条数 db.col.remove({'title':'MongoDB 教程'}, 2) # 删除全部的 db.col.remove({}) ``` <br /> ---- <br />