MongoDB 相关操作命令。
Posted youngxuebo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB 相关操作命令。相关的知识,希望对你有一定的参考价值。
MongoDB 相关操作命令:
一、启动 MongoDB服务命令
./bin/mongod -config ./data/mongodb.conf
二、关闭 MongoDB服务命令
./bin/mongod -shutdown -config ./data/mongodb.conf
三、MongoDB 连接
mongodb://username:password@hostname/dbname
标准格式:
mongodb://username:password@host1:port1,host2:port2,…,hostN:portN/dbname/?option1;option2
四、数据库操作
4.1、创建数据库:use DATABASE_NAME
MongoDB通过命令use 数据库名创建数据库。如果数据库不存在,该命令将创建一个数据库,否则切换已有数据库。
4.2、 查看当前所在的数据库:db
4.3、展示所有数据库:show dbs
4.4、删除数据库:db.dropDatabase()
删除当前数据库
五、集合操作
5.1 创建集合: db.createCollection(name, options)
命令中,name是要创建的集合名称,options是一个文档,用于指定集合的配置。
----------------------------------------------------------
参数 类型 描述
Name String 要创建的集合名称
Options Document (可选)指定内存大小、索引等选项/td>
5.2 展示集合: show collections
5.3 删除集合: db.COLLECTION_NAME.drop()
六、文档操作
6.1 插入文档
要将数据插入MongoDB集合,需要使用insert()或save()方法。
命令:db.COLLECTION_NAME.insert(document)
例子:
> db.mycollection_table.insert({
title: 'MongoDB入门',
description: 'MongoDB是开源的NoSQL数据库',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 888
})
要在一次查询中插入多个文档,可以在insert()命令中,传递一个文档数组。
> db.mycollection_table.insert([
{
title: 'MongoDB入门',
description: 'MongoDB是一个以文档为中心的NOSQL数据库',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 88
},
{
title: 'MongoDB优势',
description: "MongoDB相对于RDBMS的优势",
tags: ['mongodb', 'database', 'NoSQL'],
comments: [
{
user:'user1',
message: 'My first comment',
dateCreated: new Date(2018,11,10,2,35),
like: 0
}
]
}
])
将数据定义为一个变量插入
> document=({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
});
> db.mycollection_table.insert(document)
WriteResult({ "nInserted" : 1 })
>
要插入文档,还可以使用db.post.save(document)方法。如果没指定_id,那么save()方法将与insert()方法一样,自动生成_id。如果指定_id,则它将替换_id所标识文档的整个数据。
6.2 删除文档
remove() 方法
remove() 方法的基本语法格式如下所示:
db.mycollection_table.remove(
<query>,
<justOne>
)
#如果MongoDB 是 2.6 版本以后的,语法格式如下:
db.mycollection_table.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
参数说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档。
- writeConcern :(可选)抛出异常的级别。
举例:
#符合条件的全删除
>db.mycollection_table.remove({'title':'MongoDB 教程'})
#只想删除第一条找到的记录可以设置 justOne 为 1
>db.mycollection_table.remove(DELETION_CRITERIA,1)
>db.col.remove({'title':'MongoDB 教程'},1)
#删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令清空表)
>db.mycollection_table.remove({})
>>db.mycollection_table.remove()
6.3 更新文档
(1)MongoDB数据更新可以使用update()函数。
db.mycollection_table.update( criteria, objNew, upsert, multi )
update()函数接受以下四个参数:
- criteria : update的查询条件,类似sql update查询内where后面的。
- objNew :update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的
- upsert :这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi :mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
举例:
#将title栏位的 MongoDB 优势,更新为 MongoDB 优点
> db.mycollection_table.update({'title':'MongoDB 优势'}, {$set:{'title':'MongoDB 优点'}})
#默认情况下,MongoDB只更新一个文档。要更新多个文档,需要将参数“multi”设置为true。
db.mycollection_table.update({'title':'MongoDB 入门'}, {$set:{'title':'MongoDB 概述'}},{multi:true})
#只更新第一条记录:
db.test.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
#全部更新:
db.test.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
#只添加第一条:
db.test.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
#全部添加加进去:
db.test.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
#全部更新:
db.test.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
#只更新第一条记录:
db.test.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
- $inc 可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。
- $set 用来指定一个键并更新键值,若键不存在并创建。
(2)更新内嵌的文档
> db.test.findOne({"name":"toyota"})
{
"_id" : ObjectId("5003be465af21ff428dafbe7"),
"name" : "toyota",
"type" : "suv",
"size" : {
"height" : 10,
"width" : 5,
"length" : 15
}
}
> db.test.update({"name":"toyota"},{"$set":{"size.height":8}})
> db.test.findOne({"name":"toyota"})
{
"_id" : ObjectId("5003be465af21ff428dafbe7"),
"name" : "toyota",
"type" : "suv",
"size" : {
"height" : 8,
"width" : 5,
"length" : 15
}
(3)Save() 方法
save()方法根据文档参数更新现有文档或插入新文档。
#语法
db.COLLECTION_NAME.save({_id:ObjectId(), NEW_DATA})
#下面的示例,把新内容保存到_id为’5cf7b4839ad87fde6fd23a03’的文档中。
> db.mycollection_table.save(
{
"_id" : ObjectId("5cf7b4839ad87fde6fd23a03"), "title":"MongoDB 介绍",
"by":"qikegu.com"
}
)
6.4 查询文档
find() 方法
find()方法的基本语法如: db.COLLECTION_NAME.find()
除了find()方法之外,还有findOne()方法,它只返回一个结果。
pretty() 方法
要以格式化的方式显示结果,可以使用pretty()方法。
> db.mycollection_table.find().pretty()
#需要返回的键,0 为不返回,1为返回
> db.mycollection_table.find({"key":"value"},{"key":1}).pretty()
#相当于sql:
select key from mycollection_table where key = 'value'
MongoDB查询条件与SQL Where对比
find()方法可以传入查询条件,为便于理解,下表列出了等价的SQL Where语句。
操作 | 语法 | 例子 | 等价于 |
---|---|---|---|
等于 | {<key>:<value>} | db.mycol.find({“title”:”MongoDB教程”}).pretty() | where title = ‘MongoDB教程’ |
小于 | {<key>:{$lt:<value>}} | db.mycol.find({“likes”:{$lt:50}}).pretty() | where likes < 50 |
小于等于 | {<key>:{$lte:<value>}} | db.mycol.find({“likes”:{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.mycol.find({“likes”:{$gt:50}}).pretty() | where likes > 50 |
大于等于 | {<key>:{$gte:<value>}} | db.mycol.find({“likes”:{$gte:50}}).pretty() | where likes >= 50 |
小于等于 | {:{$ne:<value>}} | db.mycol.find({“likes”:{$ne:50}}).pretty() | where likes != 50 |
举例如下:
db.col.find({"likes" : {$gt : 100}})
#类似于SQL语句:
Select * from mycollection_table where likes > 100;
db.col.find({likes : {$lte : 150}})
#类似于SQL语句:
Select * from col where likes <= 150;
db.mycollection_table.find({likes : {$lt :200, $gt : 100}})
#类似于SQL语句:
Select * from mycollection_table where likes>100 AND likes<200;
(1) AND 条件语法
> db.mycollection_table.find(
{
$and: [
{key1: value1}, {key2:value2}
]
}
).pretty()
//and 可以省略
> db.mycollection_table.find(
{
key1:value1,
key2:value2
}
).pretty()
(2) OR 条件语法
> db.mycollection_table.find(
{
$or: [
{"key1": "value1"}, {"key2":"value2"}
]
}
).pretty()
(3) AND 和 OR混合
> db.mycollection_table.find(
{
$and: [
{"key1": "value1"}, {"key2":"value2"}
],
$or: [
{"key1": "value1"}, {"key2":"value2"}
]
}
).pretty()
(4)Limit 方法
limit()方法限定返回行数,基本语法如下所示:
>db.COLLECTION_NAME.find().limit(NUMBER)
#如查询mycollection_table集合,显示title列,不显示_id列,返回两行数据:
>db.mycollection_table.find({},{"title":1,_id:0}).limit(2)
(5) LIKE模糊查询
1、LIKE模糊查询userName包含A字母的数据(%A%)
#SQL:
SELECT * FROM UserInfo WHERE userName LIKE "%A%"
#MongoDB:
db.UserInfo.find({"userName": /A/})
2、LIKE模糊查询userName以字母A开头的数据(A%)
#SQL:
SELECT * FROM UserInfo WHERE userName LIKE "A%"
#MongoDB:
db.UserInfo.find({"userName":/^A/})
3、正则表达式查询 $regex
>db.posts.find({post_text:{$regex:"runoob"}})
#以上查询也可以写为:
>db.posts.find({post_text:/runoob/})
#例子:
select * from member where name like '%XXX%'
#在mongodb中:
db.member.find({"name":{ $regex:/XXX/}})
#查询以某字段为开头的文档
db.member.find({"name":{$regex:/^XXX/}})
#查询以某字段为结尾的文档
db.member.find({"name":{$regex:/XXX^/}})
#查询忽略大小写
db.member.find({"name":{$regex:/XXX/i}})
db.member.find( { name: { $regex: /XXX/, $options: 'i' } } )
(6)特定类型查询
参考:查询条件
6.5 排序
sort()方法
通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
db.COLLECTION_NAME.find().sort({KEY:1})
七、其他操作
7.1 索引
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
ensureIndex() 方法
MongoDB使用 ensureIndex() 方法来创建索引
#语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。
>db.COLLECTION_NAME.ensureIndex({KEY:1})
#复合索引
>db.mycol.ensureIndex({"title":1,"description":-1})
#在后台创建索引:
db.values.ensureIndex({"title":1,"description":-1}, {background: true})
7.2 聚合
主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
aggregate() 方法
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
参考1
参考2
https://blog.csdn.net/lk142500/article/details/84171819
以上是关于MongoDB 相关操作命令。的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程