Mongodb数据库常用指令归纳整理(详解)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: Mongodb数据库常用指令归纳整理(详解)

废话不多说,直接就是对mongodb执行增删改查操作了。


首先需要链接到对应的用户账户,获取相关的操作权限:


网络异常,图片无法展示
|


插入技巧



简单插入命令


db.test.insert({
    title:'测试标题',
    author:'文章作者',
    createTime: new Date()
    })
复制代码


mongodb里面的创建时间可以通过new Date函数来获取到。


插入数据的时候,背后发生了什么?


首先会检查是否有包含_id,没有的话,就会自动用objectid创建。


插入的单个文档数据大小是否有超过16m大小。(mongodb为了方式过大的文档数据对数据结构造成影响,会有这种限制)


mongodb如果没有开启安全模式的话,每次操作的背后都不会返回对应的数值响应。


复杂对象插入


针对比较复杂的对象插入,我们可以借助mongodb的document对象封装进行数据插入:


document=({
    title:'标题2',
    author:'作者2',
    createTime:new Date()
    });
db.test.insert(document)
复制代码


插入多条数据信息


var document0=({
    title:'标题0',
    author:'作者2',
    createTime:new Date()
});
var document1=({
    title:'标题3',
    author:'作者2',
    createTime:new Date()
});
var document2=({
    title:'标题4',
    author:'作者2',
    createTime:new Date()
});
db.test.insertMany(
      [document1,document2]  
        );
复制代码


如果在测试环境需要插入数据的话,可以考虑这么操作:


var arr=[];
for(var i=1;i<=5;i++){
        arr.push({
    "title" : "标题"+i,
    "author" : "作者2",
    "createTime" : new Date()
    });
};
db.test.insert(arr);
复制代码


更新技巧



更新单独一个数据


这里的 ‘标题1’ 是指条件,后边的set是指更新之后的数据内容


db.test.update(
        {'title':'标题1'},{$set:{'title':'MongodbTest'}}
)
复制代码


更新批量数据


db.test.update(
        {'title':'MongodbTest'},{$set:{'title':'MongodbTest2'}},{multi:true}
)
复制代码


特殊更新—替换


有些时候我们会需要对数据结构的内容做调整,如下图


网络异常,图片无法展示
|


这个时候可以通过编写javascript来实现:


具体编写脚本如下:


var item=db.test.findOne({"_id":-1});
item.relationships={"friends":item.friends,"enemies":item.enemies};
item.username=item.name;
delete item.friends;
delete item.enemies;
delete item.name;
db.test.update({"_id":-1},item);
复制代码


此时查询的结果就会发生了变化:


网络异常,图片无法展示
|


来看看这么一条语句:


db.users.update({ "name" : "joe" }, joe, true, true);
复制代码


这里面的后边两个参数涉及到了下边两个概念,分别是upsert模式和multi模式


UPSERT模式

如果有查询到匹配的记录则更新,反之则创建一条新的记录。


MULTI模式

默认的时候update语句只会更新一个文档数据,如果需要修改所有匹配的文档,就需要开启multi模式的参数了。


db.users.update({ "name" : "joe" }, joe, [UPSERT], [MULTI]  );
例如:
db.users.update({ "name" : "joe" }, joe, false, true );
复制代码


如果更新的时候希望更新文档对象的所有字段,推荐使用update语句,因为update默认会更新整个文档; 但是如果只需要做局部字段的更新,那么我们使用修改器会更好。

修改器


最常用的$set修改器


db.test.update(
    {"author":"作者2"},
    {"$set":{"title":"更新后的标题2"}},false,true);
复制代码


$inc修改器


db.test.update({"author":"作者2"},{"$inc":{"num":2}},false,true);
复制代码


**for循环统一为文档添加属性 **


如果以后需要统一对数据做格式修改的话,可以使用下边这种方式:


var item=db.test.find({"title":"更新后的标题2"});
for(var i=0;i<item.size();i++){
   var newItem=item[i];
   newItem.num=i;
   db.test.update({"_id":item[i]._id},newItem,false,false);
}
复制代码


查询技巧



精确查询


db.test.find({
    "title":"测试标题"
    })
复制代码


distinct查询


db.collection_name.distinct(field,query,options)
field -----指定要返回的字段(string)
query-----条件查询(document)
options-----其他的选项(document)
复制代码


or查询


查询title是xxx 或者 author是xxx的数据


db.getCollection('test').find({
    $or: [{"title":"MongodbTest2"},{"author":"作者"}]
    }).pretty();
复制代码


打印查询的一些内容


var item=db.test.find({});
for(var i=0;i<item.size();i++){
   console.log(item[i]);
}
复制代码


大于$gt查询


db.getCollection('test').find({
   title: {$gt :'sadasd'}
    }).pretty();
类比:
$gte,,$lte , $lt, $gt,$ne
复制代码


查询字段不为空:


db.getCollection('test').find({'likes':{$ne:null} })
复制代码


查询字段为空


db.getCollection('test').find({'likes':{$eq:null} })
复制代码


多个条件查询


db.getCollection('test').find({
   title: {$lt :'sadasd' ,$gt :'asdasd'}
    }).pretty();
复制代码


如果想获取 “col” 集合中 title 为 String 的数据,你可以使用以下命令:


db.col.find({"title" : {$type : 2}})
db.col.find({"title" : {$type : 'string'}})
复制代码


模糊查询


获取文档里面 tilte字段 以 “标题” 为开始的数据


db.getCollection('test').find({
   "title": /^标题/
    }).pretty();
复制代码


获取文档里面 tilte字段包含 “标题” 的数据


db.getCollection('test').find({
   "title": /标题/
    }).pretty();
复制代码


或者


db.getCollection('test').find({
   "title": /标题.*/
    }).pretty();
复制代码


分页情况查询


db.getCollection('test').find({
   "title": /标题.*/
    }).limit(2).skip(4).pretty();
复制代码


保证查询两条,而且跳过原先的前四条数据。可以参考这种方式来实现翻页功能。


排序查询


sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。


db.getCollection('test').find({
    }). sort({   
       "title":1
       }).pretty();
复制代码


管道统计


统计每个作者编写的文章总数为多少?


match相当于条件过滤


group是分组统计


db.test.aggregate(
    [
    {$match:{by_user :{$ne : null}}},
    {$group:{
        //注意这里要写为_id才生效
        _id: "$by_user",articalTotal: {$sum:1}
        }}
    ]
)
复制代码


查询结果只显示部分字段


db.BugPO.find(
    {'severity': {$ne : null}},
    {'severity':1}
)
复制代码


Group完成器


看看mysql里面的分组查询,如下边这条sql:


select title,author,sum(money) from [表] 
where title!=null
group by title,author
复制代码


如果切换到了mysql里面又该怎么编写sql呢?


db.test.group({
    'key':{
       'title':true,
       'author':true
    },
    'cond':{
         "title":{$ne:null}
    },
    'reduce': function(obj,prev){
        prev.csum+=obj.money;
    },
    'initial':{
        'csum':0
    }}
)
复制代码


删除数据



笔者使用的mongodb是4.0.3版本:


删除所有数据:(慎用)


db.test.remove({})
复制代码


按条件删除·


如果要按条件删除·,那么可以如下操作:


db.test.remove({
    "baz":"b"
});
复制代码


额外补充



查看mongodb的版本号:


db.version();
复制代码


目前笔者使用的是4.0.3版本。


判断是否为master节点


db.runCommand({
    "isMaster":1
})
复制代码


查询支持的命令语句有哪些


db.runCommand({
    "listCommands":1
})
复制代码


查询mongodb里面的所有数据库属性


db.runCommand({
    "listDatabases":1
})
复制代码


其实这条命令也验证了,mongdb的数据库中存储的都是文档类型。


可以理解为,mongodb的文档也就是对应mysql的表。


判断服务器的链接是否正常


db.runCommand({
    "ping":1
})
复制代码


当某天发现mongodb链接不上的时候(有可能是查询缓慢出现了堵塞),可以用这个命令来判断,这条命令是会绕开锁的机制

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
27天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
28天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
|
29天前
|
存储 NoSQL MongoDB
MongoDB 数据库引用
10月更文挑战第20天
18 1
|
1月前
|
存储 NoSQL MongoDB
基于阿里云数据库MongoDB版,微财数科“又快又稳”服务超7000万客户
选择MongoDB主要基于其灵活的数据模型、高性能、高可用性、可扩展性、安全性和强大的分析能力。
|
1月前
|
存储 NoSQL MongoDB
mongodb的数据库表怎么创建
在此过程中,理解并掌握这些基本操作,是深入探索MongoDB魅力,乃至构建高效数据解决方案的关键所在。通过实践,您将更加深刻地体会到这种随需应变的数据管理模式带来的便利与效率提升。
26 0
|
1月前
|
存储 NoSQL MongoDB
小川科技携手阿里云数据库MongoDB:数据赋能企业构建年轻娱乐生态
基于MongoDB灵活模式的特性,小川实现了功能的快速迭代和上线,而数据库侧无需任何更改
|
1月前
|
运维 NoSQL BI
简道云搭载阿里云MongoDB数据库,帮助数以万计企业重构业务系统
通过与MongoDB和阿里云团队的合作,让简道云少走了弯路,保障了线上服务的长期稳定运行,提高了吞吐效率,并相应降低了线上运行成本
|
13天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
28 1
|
15天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
22天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
110 1
下一篇
无影云桌面