mongo常用操作命令

本文详细介绍了MongoDB的基本操作,包括连接数据库的方式、基本查询、数据导出、操作符使用、管道聚合操作及日期和逻辑表达式。重点讲解了find、sort、skip、limit等查询命令,以及$gt、$lt等比较操作符和aggregate函数的运用,提供了丰富的实例帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

连接方式:
1.工具连接,百度下载。 如:Robomongo
2.命令连接。
方式1:
mongo mongodb://username:pwd@ip:port/db.

方式2:
a. mongo 进入后默认到test库
b. use db 如: use hyb
c. db.auth('username','pwd') 该操作必须要在use db之后进行

一、 基本查询说明
A. 查询table中d7_1列内容中包含"故障"两个字时间大于1562641348的值
db['table'].find({"d7_1":{"$regex":"故障"},time":{"$gt":1562641348}})
db['table'].find({"d7_1":/故障/,"time":{"$gt":1562641348}})
B. 查询table中所有数据,只显示包含3级故障的内容
db['table'].find({},{"d7_1":/3级故障/})
C.查询table表中前500条数据
db['table'].find().limit(500)
D.查询table表中第3-500条数据
db['table'].find().skip(2).limit(500)
备注: skip 效率很低,不建议在大数据量的情况使用。
E.查询table表所有数据,按time排序。1升序,-1降序
db['table'].find().sort({"time":1})
F.查询table表中d7_1列内容以"故障"开头的数据
db['table'].find({"d7_1":/^故障/})
G.查询table表中d7_1列内容以"故障"结尾的数据
db['table'].find({"d7_1":/故障$/)

二、 导出文件
导出说明
1.-h(host)
2.-u(username)
3.-p(pwd) -d(db)
4.-c(collection)
5.-f(fields要导出的列,不填导出全部)
6.-o(导出文件名)
7.–csv(导出文件格式)
8.-p (筛选条件,未测试)
具体使用方法可以参考 mongoexport --help 或者 man mongoexport

mongoexport -h 127.0.0.1 -u usename -p 123456 -d db -c collection -f fields -p '{"vin":"1234124"}' -o xxx.csv --csv

三、 mongo 基本语法说明
db.COLLECTION_NAME.function();
db 通常为固定写法,COLLECTION_NAME为表名(该写法表不能以数字开头),function 为mongo中的函数(find,count,insert,drop等).
db['COLLECTION_NAME'].function(); 表为数字开头的写法.

db.COLLECTION_NAME.insert({ title:'标题', body:'内容', foot:'页脚' });
所有函数中,括号里都是Json格式,并且mongo里的函数可以使用变量.如:
tempValue = ({ title:'标题', body:'内容',foot:'页脚',list:[1,2,3]});
db.COLLECTION_NAME.insert(tempValue);

四、 操作符
在mongo中定义了一些和$相关的常量(我是这样认为的).举例常用:

  • $gt 大于
  • $gte 大于等于
  • $lt 小于
  • $lte 小于等于
  • $ne 不等于
  • $eq 等于

使用示例:
db['table'].find("time":{"$gt":1562641348,"$lt":1562641349})
$type返回指定列的匹配数据类型的值,具体数字对应类型自行百度.如:
db['table'].find({"d7_1":{"$type":2} 返回d7_1是string类型的数据
$regex 正则表达式操作符,不赘述.

五、管道聚合aggregate
db[‘table’].aggregate(pipeline,options)
A.分组管道实例
1.求和
db['table'].aggregate([{$group : {_id : "$vin", num : {$sum : "$cmd"}}}]) 根据VIN分组,对cmd进行求和
2.计算平均值
db['table'].aggregate([{$group : {_id : "$vin",num : {$avg : "$cmd"}}}])
3.最小值
db['table'].aggregate([{$group : {_id : "$vin",num : {$min : "$cmd"}}}])
4.最大值
db['table'].aggregate([{$group : {_id : "$vin",num : {$max : "$cmd"}}}])
5.插入值到一个数组中
db['table'].aggregate([{$group : {_id : "$vin", url : {$push: "$list"}}}])
6.插入值到一个数组中,但不创建副本
db['table'].aggregate([{$group : {_id : "$vin", url : {$addToSet : "$list"}}}])
7.获取第一个文档数据
db['table'].aggregate([{$group : {_id : "$vin", first_url : {$first : "$list"}}}])
8.获取最后一个文档数据
db['table'].aggregate([{$group : {_id : "$vin", last_url : {$last : "$list"}}}])
B. 管道操作符
1.$geoNear
2.$group 实际聚合
3.$limit 限制从当前位置开始的给定数量的文档数量
4.$match 输出符合条件的文档
db['table'].aggregate({$match:{time:{"$gt":1562642464,"$lt":1562642485}}}) 显示在这个范围内的数据
5.$project 1表示要该字段,0表示不要该字段,也可以对返回的字段进行重命名,比如将title改为articleTitle
db['457B'].aggregate({$project:{" _id":0,"vin":1,"cmd":1,"time1":"$time"}});
显示vin和cmd,把time更名为time1(只针对结果,类似mysql别名)
6.$skip 跳过
7.$sort排序
8.$unwind 拆解数据
其实管道就是,把之前返回的数据,给到下一阶段使用,可以看成是在做层层筛选。。

六、附录
日期表达式
$dayOfYear: 返回该日期是这一年的第几天(全年 366 天)。
$dayOfMonth: 返回该日期是这一个月的第几天(1到31)。
$dayOfWeek: 返回的是这个周的星期几(1:星期日,7:星期六)。
$year: 返回该日期的年份部分。
$month: 返回该日期的月份部分( 1 到 12)。
$week: 返回该日期是所在年的第几个星期( 0 到 53)。
$hour: 返回该日期的小时部分。
$minute: 返回该日期的分钟部分。
$second: 返回该日期的秒部分(以0到59之间的数字形式返回日期的第二部分,但可以是60来计算闰秒)。
$millisecond:返回该日期的毫秒部分( 0 到 999)。
$dateToString{ $dateToString: { format: , date: } }
使用方法:
db['table'].aggregate([{$match:{"id":"99999"}},{$project:{"年份":{$year:"$time"},"月份":{$month:"$time"},"一年中第几周":{$week:"$time"},"日期":{$dayOfMonth:"$time"},"星期":{$dayOfWeek:"$time"},"一年中第几天":{$dayOfYear:"$time"},"时":{$hour:"$time"},"分":{$minute:"$time"},"秒":{$second:"$time"},"毫秒":{$millisecond:"$time"},"自定义格式化时间":{$dateToString:{format:"%Y年%m月%d %H:%M:%S",date:"$time"}}}}])
上面的命令,需要先执行一条插入,我们本身的车辆写入是没有时间格式的。
db['table'].insert({'time':new Date(),"id":"99999"})
逻辑表达式
$cmp 如果第一个参数大于第二个参数返回正数,第一个参数小于第二个则返回负数,也可以利用$strcasecmp来比较字符串(中文无效):
db['457B'].aggregate({$project:{test:{$cmp:["1","2"]}}})

上面说的$eq/$ne/$gt/$gte/$lt/$lte适用。另外还有:

$and 中的每个参数都为true时返回true
$or 则表示参数中有一个为true就返回true
$not 则会对它的参数的值取反
$cond 第一个参数如果为true,则返回trueExpr,否则返回falseExpr.
$ifNull 第一个参数如果为null,则返回replacementExpr,否则就返回第一个参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值