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重命名为usersdb.serverStatus() 查看数据库的状态db.stats()db 可以查看当前处于哪个数据库db.dropDatabase() 删除数据库db.mycoll.drop() 删除集合db.help()helpdb.mycoll.help() 查看使用集合的帮助db.createCollection("mycoll", {capped:true, size:100000,max:1000}) 创建固定小的集合,文档1000个,大小100000kbdb.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小于18db.users.find({age:{$lt:18}})//小于等于18db.users.find({age:{$lte:18}})//大于18db.users.find({age:{$gt:18}})//大于等于18db.users.find({age:{$gte:18}})//不等于18db.users.find({age:{$ne:18}})//14<age<=18db.users.find({age:{$gt:14,$lte:18}})//查询age为18或14或16 $in $nindb.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的形式显示}
