开启Mongodb:
(以管理员身份在cmd中输入)
net start MongoDB
进入mongodb shell:
mongo
使用默认端口
mongo --port 28015
使用端口28015
退出shell:
exit
或者按Ctrl+C
基础指令
查询当前使用的数据库
db
显示所有数据库:
show dbs;
显示所有的集合:
show collections
使用数据库:
use <database>
创建数据库:
use <新数据库名>
单纯的use <新数据库名>
之后,不能通过show dbs
来看到新建的数据库,必须要在数据库中再创建collection之后才能通过show dbs
看到该新建的数据库
删除数据库:
首先切换到该数据库,然后再删除:
use delete_database
db.dropDatabase()
删除集合:
db.collection_name.drop()
创建普通集合:
db.createCollection('new_collection');
创建capped集合:
db.createCollection("collection_name", {size: 20, capped: true, max: 100})
size:限制集合使用的大小,默认无上限
max:限制集合中document的条数,默认无上限
size的优先级比max更高
查看当前集合的document条数:
db.collection_name.count()
查看集合数据的大小:
db.collection_name.dataSize()
集合重命名:
db.collection_name.renameCollection("new_collection_name")
写入文档:
db.collection_name.insert({"user":"clientA"})
如果集合中已有该条数据则报错
db.collection_name.save({"user":"clientA"})
如果集合中已有该数据则刷新
查询
结构化显示查询结果:
db.collection_name.find().pretty()
查询的括号中只能设置两个字典参数,第一个是查询的条件,第二是查询返回的字段,例如:
db.collection_name.find({"name":"Tom"}, {"name":1, "age":1})
表示查询name字段为Tom的数据,同时只显示name和age这两个字段
条件查询
与
db.getCollection('aws_instance_billings').find({'UsageStartDate': '2019-06-01 00:00:00', 'UsageStartDate': '2019-07-01 00:00:00'})
或者:
db.aws_instance_billings.find({'UsageStartDate': '2019-06-01 00:00:00', 'UsageStartDate': '2019-07-01 00:00:00'})
或
或查询使用$or带一个字典数组
db.collection_name.find({$or:[{name:'Tom'},{name:'Jack'}]})
$or两边加不加字符串符号都可以
大于、大于等于: $gt $gte
小于、小于等于:$lt $lte
db.collection_name.find({UsageQuantity:{$gte:0.5, $lt:1}})
不等于:$ne
db.collection_name.find({UsageQuantity:{$ne:1}})
查询存在某个字段的document
db.collection_name.find({'fieldA':{$exists:true}})
包含$in
命令
db.aws_instance_billings.find({'UsageStartDate':{$in:{'2019-06-01 00:00:00', '2019-07-01 00:00:00'}}})
不包含$nin
命令
db.aws_instance_billings.find({'UsageStartDate':{$nin:{'2019-06-01 00:00:00', '2019-07-01 00:00:00'}}})
以上命令都可以取反:$not
db.collection_name.find({'fieldA':{$not:{$exists:true}}})
空值查询null
db.collection_name.find({'name':null})
查询name这个字段为空值的document
嵌套查询
假设我们有如下结构的数据,需要查询内层的信息:
{
'fieldA': 123,
'region_data': {
'ap-south-1':{
'total_cpu':23,
'other': 'india'
}
}
db.collection_name.find({'region_data.ap-south-1.total_cpu':23})
数组查询
db.collection_name.find({'favorite-number.0':6})
查询favorite-number这个字段(该字段为一个数组)下第一个元素值为6的document
高级查询$where
查询age>18的数据,以下命令可以得到相同的结果:
db.collection_name.find({age:{$gt:18}})
db.collection_name.find({$where: {"this.age>18"}})
db.collection_name.find("this.age>18")
注意此处第三个查询语句db.collection_name.find("this.age>18")
没有花括号
同时第三个查询语句不支持嵌套查询,例如对于如下结构的数据:
{
'fieldA': 123,
'region_data': {
'ap-south-1':{
'total_cpu':23,
'other': 'india'
}
}
不支持如下的嵌套查询:
db.collection_name.find("this.region_data.ap-south-1.total_cpu>23")
查询辅助
limit()
:限制查询返回的document条数
db.collection_name.find().limit(2)
只返回查询结果的前两条
skip()
:跳过前面几条数据
db.collection_name.find().skip(3).limit(5)
跳过前三条数据,总共显示5条数据
sort()
:查询结果排序
db.collection_name.find().sort({age: 1})
对年龄升序处理再返回结果
db.collection_name.find().sort({age: -1})
对年龄降序处理再返回结果
按照存入数据库的顺序显示:
db.getCollection("aws_accounts").find().sort({$natural:-1}).limit(200)
按照存入数据库的顺序逆序显示:
db.getCollection("aws_accounts").find().sort({$natural:-1}).limit(200)