MongoDB 常用 Shell 命令

MongoDB 常用 Shell 命令


查询

根据ID查询

db.document.findOne({_id: ObjectId("")});

按属性查询

db.document.find({"": "", "": ""});

或查询

db.document.find({
	$or: [
		{"": ""},
		{"": ""}
	]
});

只查询需要的字段

db.document.find({}, {id: 1, '': 1});

查询某个字段为空的数据

db.document.find({"company.contractStatus": null}).limit(10);

过滤不需要的字段

db.document.find({}, {id: 0, '': 0});

指定字段去重

db.document.distinct('');
db.document.distinct('', {'': ''});

按字段排序(1正序、-1反序)、分页

db.document.find({}).sort({'': 1}).skip().limit();

统计数量

db.document.count();
db.document.find().count();

查询某个时间段内的数据

db.offer.find({createDate: { "$gte" : { "$date" : "2020-06-01T16:00:00.000Z"} , "$lte" : { "$date" : "2020-06-29T15:59:59.999Z"}}});

按字段分组统计

db.document.aggregate([
	{$match: {'': ''}, {'': ''}},
	{$group: {_id: {'': ''}, count: {$sum: 1}}}
])

例:
db.getCollection("position").aggregate([
	{$match: {name: "安卓高级工程师"}},
	{$group: {_id: {"name": "$name", "status": "$status"}, count: {$sum: 1}}},
	{$match: {count: {$eq: 1}}},
	{$project: {"field_name": "$_id.name", "field_status": "$_id.status", "field_count": "$count"}},
])

查询指定时间区间内

var date = {$gt: ISODate("2020-06-15T00:00:00.157+0800"), $lt: ISODate("2020-06-21T23:59:59.157+0800")};
db.user.find({"createDate" : date, authStatus: {$in: [1,2,11]}}).forEach(function(doc) {
	print(doc.mobile + "," + (doc.trueName || "") + "," + (doc.nick || ""));
});	

查询示例

db.getCollection("email_send").find({
    fromMail: {$ne: "service@hunterplus.net"}, 	//fromMail不为service@hunterplus.net的
    errorMessage: {$exists: true},							//errorMessage字段存在的
    $where: "this.attachments.length > 0"				//数组字段attachments长度大于0的
}).sort({sendDate: -1});										//按sendDate字段倒序排列

正则匹配

db.user.find({trueName: {"$regex": ".*韩莹.*"}});

更新

db.collection.update(
   <query>,
   <update>,
   {
	 upsert: <boolean>,
	 multi: <boolean>,
	 writeConcern: <document>
   }
)

query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。

只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部添加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

新增字段,为atest集合新增一个字段content

db.atest.update({},{$set:{content:""}},{multi:1})

删除uname字段

db.atest.update({},{$unset:{uname:""}},false,true)

修改字段,把content改为mcontent

db.atest.update({}, {$rename : {"content" : "mcontent"}}, false, true)

删除

带条件删除数据

db.user.remove({"name":"zhangshan"})
db.user.deleteMany({"name":"zhangshan"});
db.user.deleteOne({"name":"zhangshan"});

删除所有数据

db.user.remove({})

删除集合

db.user.drop()

删除 common 字段为空的所有数据

db.help_column.deleteMany({common:{$in:[null],$exists:false}})

聚合查询

分组统计

案例1

db.offer.aggregate([
    {$group: {"_id": {positionId: "$positionId"}, count: {$sum: 1}}},	//根据positionId分组统计
    {$match: {count: {$gt: 2}}}	//对count进行过滤,只保留分组数量大于2的
]);

案例2:根据positionId分组统计,筛选出数量大于10的,再统计其数量

db.offer.aggregate([
    {$group: {"_id": {positionId: "$positionId"}, count: {$sum: 1}, test: {$sum: 0}}},
    {$match: {count: {$gt: 10}}},
    {$group: {"_id": {test: "$test"}, total: {$sum: 1}}}
]);

案例3:日期操作

db.recommender.aggregate([
{$match: {companyId: '57ab1e018b56fe218db01ad7'}},
{
    $project: {
        positionName: 1,
        companyName: 1,
        createDate: 1,
        sourceTimeString: {$dateToString: {format: "%Y-%m-%d", date: "$createDate"}},                         //日期格式化
        normalTime: {$add: ["$createDate", 8*60*60*1000]},                                                    //时间运算,+8小时
        normalTimeString: {$dateToString: {format: "%Y-%m-%d", date: {$add: ["$createDate", 8*60*60*1000]}}}  //时间运算 + 格式化
    }
}
]).forEach(function(data){
    print(data.sourceTimeString + " , " + data.normalTimeString);
});

案例4:按时间分组统计

db.recommender.aggregate([
    {$match: {companyId: '57ab1e018b56fe218db01ad7'}},
    {
        $project: {
            positionName: 1,
            companyName: 1,
            createDate: 1,
            sourceTimeString: {$dateToString: {format: "%Y-%m-%d", date: "$createDate"}},                         //日期格式化
            normalTime: {$add: ["$createDate", 8*60*60*1000]},                                                    //时间运算,+8小时
            normalTimeString: {$dateToString: {format: "%Y-%m-%d", date: {$add: ["$createDate", 8*60*60*1000]}}}  //时间运算 + 格式化
        }
    },
    { $group: { _id: "$normalTimeString", count: { $sum: 1 }} },
]);

MongoDB 数据类型

在这里插入图片描述
根据数据类型查询

db.col.find({"title" : {$type : 2}})
或
db.col.find({"title" : {$type : 'string'}})
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值