1、基础命令
shift+enter 进入命令行换行模式,必须在括号后才能进入 enter:换行,ctrl+enter为执行
db.version() 查看版本
db.getMongo() 查看当前连接的服务器
show dbs 查看数据库
use test 使用test数据库
show collections or show tables 查看库中的集合(表)
db.demo.renamecollection("users") 将集合demo重命名为users
db.serverStatus() 查看数据库的状态
db.stats()
db 可以查看当前处于哪个数据库
db.dropDatabase() 删除数据库
db.mycoll.drop() 删除集合
db.help()
help
db.mycoll.help() 查看使用集合的帮助
db.createCollection("mycoll", {capped:true, size:100000,max:1000}) 创建固定小的集合,文档1000个,大小100000kb
db.users.createIndex({age:1}) 创建索引
db.users.save({_id:11,name:"ls",age:52}) //更新,存在主键11的数据,会覆盖
db.users.update({age:18},{$set:{salary:55000.2}},{multi:true}) 修改文档,multi默认为false,只修改匹配的第一条文档。true:全部修改
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); 第一个参数:不存在是否插入,false不插入,第二个参数:是否全部修改
db.users.insert({_id:11,name:"zs",age:22,city:"hz"}) //插入,存在主键11的数据,抛出异常,不能插入
db.users.insert([
{name:"小刚1",age:35,city:"bj"},
{name:"小刚2",age:55,city:"hz"},
{name:"小刚3",age:25,city:"sh"}])
db.users.remove({age:22},false) true: 只删除匹配的第一条文档,false:删除全部匹配的文档,默认的false
官方推荐使用 deleteOne() 和 deleteMany() 方法删除文档,语法格式如下:
db.collection.deleteMany ({})
db.collection.deleteMany ({ status : "A" })
db.collection.delete.One ({ status : "D" })
第一条语句删除集合下所有的文档,第二条语句删除 status 等于 A 的全部文档,第三条语句删除 status 等于 D 的一个文档。
2、查询
//查询所有
db.users.find()
db.users.find({})
//统计个数
db.users.find().count()
//排序:
db.users.find().sort({age:1}) //升序
db.users.find().sort({age:-1}) //降序
//返回个数:3个文档
db.users.find().limit(3)
//跳过前2个文档
db.users.find().sort({age:-1}).skip(2)
//分页:每页3个文档,查看第三页文档
db.users.find().sort(age:-1).skip(2*3).limit(3)
//格式化显示(类似json格式)
db.users.find().pretty()
//#投影查询(显示特定字段) db.mycoll.find(query,projection)
//1.显示name和age字段
db.users.find({},{name:1,age:1})
//2.不显示age字段
db.users.find({},{age:0})
注意:只能都为1,或者0,_id字段除外 ,不能同时包含0和1
//只返回第一条文档
db.users.findOne()
#判断字段存在
db.getCollection("diagnosisResult").find({serviceName:"px-basesystem-zipkin","timestamp":{$gte:159348348800,$lte:1593487688306},"instances.diagnosisInfo":{$exists:true}})
//查询age等于18的所有文档
db.users.find({"age":18}) //字段可以不用引号
//age小于18
db.users.find({age:{$lt:18}})
//小于等于18
db.users.find({age:{$lte:18}})
//大于18
db.users.find({age:{$gt:18}})
//大于等于18
db.users.find({age:{$gte:18}})
//不等于18
db.users.find({age:{$ne:18}})
//14<age<=18
db.users.find({age:{$gt:14,$lte:18}})
//查询age为18或14或16 $in $nin
db.users.find({age:{$in:[18,14,16]}})
db.users.find({name:/li/}) //name包含li
{name:/^xxx/} 以xxx开头
{name:/xxx^/} 以xxx结尾
{name:/xxx/i} 忽略大小写
https://blog.csdn.net/u011555260/article/details/82260441
//与:查询name:"zs",并且age:18的文档
db.users.find({name:"zs",age:18})
//或:查看name:ns,或者age:18的文档
db.users.find({$or:[{age:18},{name:"ns"}]})
//非:查询非name:"ns"的文档
db.users.find({name:{$ne:"ns"}})
数据类型:https://www.runoob.com/mongodb/mongodb-operators-type.html
//查询name字段为double类型的文档
db.users.find({name:{$type:"double"}})
db.users.find({name:{$type:1}})
//查询name字段为string类型的文档
db.users.find({name:{$type:"string"}})
db.users.find({name:{$type:2}})
,{$match:{"serviceName":{$in:["px-basesystem-diagnosis","px-common-log",/basesystem/]}}}
,{$match:{"serviceName":/basesystem/}}
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档
//分组:按salary分组,统计每组的个数
db.users.aggregate([{$group:{_id:"$salary",num:{$sum:1}}}])
//分组:以salary,和age分组
db.users.aggregate([{$group:{_id:{sal:"$salary",age:"$age"},num:{$sum:"$salary"}}}])
//统计总和
db.users.aggregate([{$group:{_id:"$salary",num:{$sum:"$salary"}}}])
//分组:age最大
db.users.aggregate([{$group:{_id:"$salary",num:{$max:"$age"}}}])
//求所有文档salary的平均值
db.users.aggregate([{$group:{_id:null,num:{$avg:"$salary"}}}])
//显示字段:默认_id字段显示,为0 不显示,不能同时包含1和0,除了_id 字段外
db.users.aggregate({$project:{name:1,_id:0,age:1}})
//$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
//经过$skip管道操作符处理后,前五个文档被"过滤"掉。
db.article.aggregate(
{ $skip : 5 });
db.diagnosisResult.aggregate(
[
{
$group: {
_id: "$serviceName", //分组字段
"serviceName": { //别名
$first: "$serviceName" //显示的字段
},
"instances": {
$first: "$instances"
},
"id": {
$first: "$_id"
},
timestamp: { //别名
$max: "$timestamp" //最大值
}
}
},
{
$project: { //投影 不显示_id
"_id": 0
}
},
{
$sort: {
"serviceName": 1 //排序
}
}
]
)
{
"db": "test", //数据库名称
"collections": NumberInt("1"), //集合个数
"views": NumberInt("0"), //
"objects": NumberInt("6"), //文档数量
"avgObjSize": 78.3333333333333, //平均每个文档的大小
"dataSize": 470, //数据占用的空间总大小,不包含索引,单位字节
"storageSize": 36864, //分配的存储空间大小
"numExtents": NumberInt("0"), // 连续分配的数据块
"indexes": NumberInt("2"), // 索引个数
"indexSize": 53248, //索引占用空间大小
"fsUsedSize": 2042384384,
"fsTotalSize": 18788384768,
"ok": 1
}
游标是指对数据一行一行地进行操作,在 MongoDB 数据库中对游标的控制非常简单,只需使用 firid() 函数就可以返回游标。
有关游标的方法参见下表。
方法名 | 作用 |
---|---|
hasNext | 判断是否有更多的文档 |
next | 用来获取下一条文档 |
toArray | 将查询结构放到数组中 |
count | 查询的结果为文档的总数量 |
limit | 限制查询结果返回数量 |
skip | 跳过指定数目的文档 |
sort | 对查询结果进行排序 |
objsLeftlnBatch | 查看当前批次剩余的未被迭代的文档数量 |
addOption | 为游标设置辅助选项,修改游标的默认行为 |
hint | 为查询强制使用指定索引 |
explain | 用于获取查询执行过程报告 |
snapshot | 对查询结果使用快照 |
以下语句显示使用游标查找所有文档
var cursor = db.test.find()
while (cursor.hasNext()){
var doc = cursor.next();
print(doc.name); //把每一条数据都单独拿出来进行逐行的控制
print(doc); //将游标数据取出来后,其实每行数据返回的都是一个[object BSON]型的内容
printjson(doc); //将游标获取的集合以JSON的形式显示
}