`
mizoushenjing
  • 浏览: 55450 次
  • 性别: Icon_minigender_1
  • 来自: 聊城
社区版块
存档分类
最新评论

mongoDB基本操作

阅读更多
DB shell数据操作

shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的。

Ø 数据库

1、Help查看命令提示
[html] view plaincopy

    > help 
    > db.help(); 
    > db.yourColl.help(); 
    > db.youColl.find().help(); 
    > rs.help(); 

2、切换/创建数据库
[html] view plaincopy

    > use yourDB; 

当创建一个集合(table)的时候会自动创建当前数据库

3、查询所有数据库
[html] view plaincopy

    > show dbs; 

4、删除当前使用数据库
[html] view plaincopy

    > db.dropDatabase(); 

5、从指定主机上克隆数据库
[html] view plaincopy

    > db.cloneDatabase(“127.0.0.1”); 

将指定机器上的数据库的数据克隆到当前数据库

6、从指定的机器上复制指定数据库数据到某个数据库
[html] view plaincopy

    > db.copyDatabase("mydb", "temp", "127.0.0.1"); 

将本机的mydb的数据复制到temp数据库中

7、修复当前数据库
[html] view plaincopy

    > db.repairDatabase(); 

8、查看当前使用的数据库
[html] view plaincopy

    > db.getName(); 
    > db; 

db和getName方法是一样的效果,都可以查询当前使用的数据库

9、显示当前db状态
[html] view plaincopy

    > db.stats(); 

10、当前db版本
[html] view plaincopy

    > db.version(); 

11、查看当前db的链接机器地址
[html] view plaincopy

    > db.getMongo(); 

Ø Collection聚集集合

1、创建一个聚集集合(table)
[html] view plaincopy

    > db.createCollection(“collName”, {size: 20, capped: 5, max: 100}); 

2、得到指定名称的聚集集合(table)
[html] view plaincopy

    > db.getCollection("account"); 

3、得到当前db的所有聚集集合
[html] view plaincopy

    > db.getCollectionNames(); 

4、显示当前db所有聚集索引的状态
[html] view plaincopy

    > db.printCollectionStats(); 

Ø 用户相关

1、添加一个用户
[html] view plaincopy

    > db.addUser("name"); 
    > db.addUser("userName", "pwd123", true); 

添加用户、设置密码、是否只读

2、数据库认证、安全模式
[html] view plaincopy

    > db.auth("userName", "123123"); 

3、显示当前所有用户
[html] view plaincopy

    > show users; 

4、删除用户
[html] view plaincopy

    > db.removeUser("userName"); 

Ø 其他

1、查询之前的错误信息
[html] view plaincopy

    > db.getPrevError(); 

2、清除错误记录
[html] view plaincopy

    > db.resetError();  

三、Collection聚集集合操作

Ø 查看聚集集合基本信息

1、查看帮助
[html] view plaincopy

    > db.yourColl.help(); 

2、查询当前集合的数据条数
[html] view plaincopy

    > db.yourColl.count(); 

3、查看数据空间大小
[html] view plaincopy

    > db.userInfo.dataSize(); 

4、得到当前聚集集合所在的db
[html] view plaincopy

    > db.userInfo.getDB(); 

5、得到当前聚集的状态

> db.userInfo.stats();

6、得到聚集集合总大小

> db.userInfo.totalSize();

7、聚集集合储存空间大小

> db.userInfo.storageSize();

8、Shard版本信息

> db.userInfo.getShardVersion()

9、聚集集合重命名

> db.userInfo.renameCollection("users");

将userInfo重命名为users

10、删除当前聚集集合

> db.userInfo.drop();

Ø 聚集集合查询

1、查询所有记录

> db.userInfo.find();

相当于:select * from userInfo;

默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”

但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize = 50;这样每页就显示50条记录了。

2、查询去掉后的当前聚集集合中的某列的重复数据

> db.userInfo.distinct("name");

会过滤掉name中的相同数据

相当于:select distict name from userInfo;

3、查询age = 22的记录

> db.userInfo.find({"age": 22});

相当于:select * from userInfo where age = 22;

4、查询age > 22的记录

> db.userInfo.find({age: {$gt: 22}});

相当于:select * from userInfo where age > 22;

5、查询age < 22的记录

> db.userInfo.find({age: {$lt: 22}});

相当于:select * from userInfo where age < 22;

6、查询age >= 25的记录

> db.userInfo.find({age: {$gte: 25}});

相当于:select * from userInfo where age >= 25;

7、查询age <= 25的记录

> db.userInfo.find({age: {$lte: 25}});

8、查询age >= 23 并且 age <= 26

> db.userInfo.find({age: {$gte: 23, $lte: 26}});

9、查询name中包含 mongo的数据

> db.userInfo.find({name: /mongo/});

相当于:select * from userInfo where name like ‘%mongo%’;

10、查询name中以mongo开头的

> db.userInfo.find({name: /^mongo/});

select * from userInfo where name like ‘mongo%’;

11、查询指定列name、age数据

> db.userInfo.find({}, {name: 1, age: 1});

相当于:select name, age from userInfo;

当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。

12、查询指定列name、age数据, age > 25

> db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});

相当于:select name, age from userInfo where age > 25;

13、按照年龄排序

升序:

> db.userInfo.find().sort({age: 1});

降序:

> db.userInfo.find().sort({age: -1});

14、查询name = zhangsan, age = 22的数据

> db.userInfo.find({name: 'zhangsan', age: 22});

相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;

15、查询前5条数据

> db.userInfo.find().limit(5);

相当于:select top 5 * from userInfo;

16、查询10条以后的数据

> db.userInfo.find().skip(10);

相当于:select * from userInfo where id not in ( select top 10 * from userInfo );

17、查询在5-10之间的数据

> db.userInfo.find().limit(10).skip(5);

可用于分页,limit是pageSize,skip是第几页*pageSize

18、or与 查询

> db.userInfo.find({$or: [{age: 22}, {age: 25}]});

相当于:select * from userInfo where age = 22 or age = 25;

19、查询第一条数据

> db.userInfo.findOne();

相当于:select top 1 * from userInfo;

> db.userInfo.find().limit(1);

20、查询某个结果集的记录条数

> db.userInfo.find({age: {$gte: 25}}).count();

相当于:select count(*) from userInfo where age >= 20;

21、按照某列进行排序

> db.userInfo.find({sex: {$exists: true}}).count();

相当于:select count(sex) from userInfo;

Ø 索引

1、创建索引

> db.userInfo.ensureIndex({name: 1});
> db.userInfo.ensureIndex({name: 1, ts: -1});

2、查询当前聚集集合所有索引

> db.userInfo.getIndexes();

3、查看总索引记录大小

> db.userInfo.totalIndexSize();

4、读取当前集合的所有index信息

> db.users.reIndex();

5、删除指定索引

> db.users.dropIndex("name_1");

6、删除所有索引索引

> db.users.dropIndexes();

Ø 修改、添加、删除集合数据

1、添加

> db.users.save({name: ‘zhangsan’, age: 25, sex: true});

添加的数据的数据列,没有固定,根据添加的数据为准

2、修改

> db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);

相当于:update users set name = ‘changeName’ where age = 25;

> db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);

相当于:update users set age = age + 50 where name = ‘Lisi’;

> db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);

相当于:update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’;

3、删除

> db.users.remove({age: 132});

4、查询修改删除
[html] view plaincopy

    > db.users.findAndModify({ 
    ... query: {age: {$gte: 25}},  
    ... sort: {age: -1},  
    ... update: {$set: {name: 'a2'}, $inc: {age: 2}}, 
    ... remove: true 
    ... }); 
      
    > db.runCommand({ findandmodify : "users",  
    ... query: {age: {$gte: 25}},  
    ... sort: {age: -1},  
    ... update: {$set: {name: 'a2'}, $inc: {age: 2}}, 
    ... remove: true 
    ... }); 

update 或 remove 其中一个是必须的参数; 其他参数可选。

参数


详解


默认值

query


查询过滤条件


{}

sort


如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作


{}

remove


若为true,被选中对象将在返回前被删除


N/A

update


一个 修改器对象


N/A

new


若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。


false

fields


参见Retrieving a Subset of Fields (1.5.0+)


All fields

upsert


创建新对象若查询结果为空。 示例 (1.5.4+)


false

1、简单Hello World
[html] view plaincopy

    > print("Hello World!"); 

这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;

2、将一个对象转换成json
[html] view plaincopy

    > tojson(new Object()); 
    > tojson(new Object('a')); 

3、循环添加数据
[html] view plaincopy

    > for (var i = 0; i < 30; i++) { 
    ... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2}); 
    ... }; 

这样就循环添加了30条数据,同样也可以省略括号的写法
[html] view plaincopy

    > for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2}); 

也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;

4、find 游标查询
[html] view plaincopy

    >var cursor = db.users.find(); 
    > while (cursor.hasNext()) {  
    ... printjson(cursor.next());  
    ... } 

这样就查询所有的users信息,同样可以这样写
[html] view plaincopy

    >var cursor = db.users.find(); 
    >while (cursor.hasNext()) { printjson(cursor.next); } 

同样可以省略{}号

5、forEach迭代循环
[html] view plaincopy

    >db.users.find().forEach(printjson); 

forEach中必须传递一个函数来处理每条迭代的数据信息

6、将find游标当数组处理
[html] view plaincopy

    > var cursor = db.users.find(); 
    > cursor[4]; 

取得下标索引为4的那条数据

既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();

那样我们也可以用循环显示数据
[html] view plaincopy

    > for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]); 

7、将find游标转换成数组
[html] view plaincopy

    > var arr = db.users.find().toArray(); 
    > printjson(arr[2]); 

用toArray方法将其转换为数组

8、定制我们自己的查询结果

只显示age <= 28的并且只显示age这列数据
[html] view plaincopy

    > db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson); 
    > db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson); 

排除age的列
[html] view plaincopy

    > db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson); 

9、forEach传递函数显示信息
[html] view plaincopy

    > db.things.find({x:4}).forEach(function(x) {print(tojson(x));}); 

上面介绍过forEach需要传递一个函数,函数会接受一个参数,就是当前循环的对象,然后在函数体重处理传入的参数信息。
分享到:
评论

相关推荐

    本程序使用Matlab调用COMSOL进行二元(电容与相对介电常数)数据的生成.zip

    matlab

    操作系统课程设计基于C++实现的操作系统仿真虚拟页式存储管理项目源代码

    操作系统课程设计基于C++实现的操作系统仿真虚拟页式存储管理项目源代码

    西门子S7-1500与V90伺服在定长切断中的应用及优化 - 工业自动化解决方案

    内容概要:本文详细介绍了西门子S7-1500 PLC与V90伺服在定长切断应用中的具体实现方法和技术要点。首先,文章展示了如何利用TIA Portal V16平台配置工艺对象“CuttingAxis”,并解释了关键参数如每转脉冲数、丝杆导程、减速比等的作用。接着,针对可能出现的问题,如轴运行抖动、控制字状态丢失等进行了深入探讨,并提供了相应的解决措施,比如调整前馈参数、修改报文配置等。此外,还分享了一些提高系统性能的小技巧,例如启用动态限制选项、优化速度前馈与位置环配合等。最后,强调了该方案在包装机械和线材加工领域的广泛应用前景及其优势所在。 适合人群:从事工业自动化相关工作的工程师和技术人员,尤其是那些希望深入了解和掌握西门子PLC与伺服系统集成应用的专业人士。 使用场景及目标:适用于需要实现高精度定长切断操作的企业或项目,旨在帮助用户构建稳定可靠的控制系统,确保生产效率和产品质量。 其他说明:文中不仅涵盖了理论知识讲解,还包括大量实际案例分析以及代码示例,便于读者更好地理解和应用所学内容。同时提醒读者关注硬件配置、软件编程、参数调节等多个方面,以达到最佳效果。

    2023年计算机二级Office选择题考前模拟.docx

    2023年计算机二级Office选择题考前模拟.docx

    CMD仿制PYTHON,自己制作,望通过

    目前可以新建目录,具体自己看代码

    基于SpringBoot网上超市(源码+数据库+万字文档)507

    基于SpringBoot网上超市,系统包含两种角色:用户、管理员,系统分为前台和后台两大模块,主要功能如下: 1 管理员功能实现 商品信息管理 管理员可以通过提交商品名称查询商品,并查看该商品的用户评论信息。 用户管理 管理员通过提交用户名来获取用户资料,对有异常情况的用户信息进行修改,并可以详细查看用户资料。 商品评价管理 管理员审核用户对商品的评价,经过审核的评价才会显示,并可以统计商品评价信息。 已支付订单 管理员查看已支付的订单,并逐个进行订单发货。 2 用户功能实现 商品信息 用户可以收藏、立即购买商品,或对商品进行评价,同时将商品添加到购物车。 购物车 用户可以直接下单购买购物车中的商品,或删除购物车中的商品。 确认下单 用户选择地址,查看支付金额信息,以确认订单之前的所有细节。 已支付订单 用户查看已支付的订单,若对购买商品产生后悔,可以申请退款。 二、项目技术 开发语言:Java 数据库:MySQL 项目管理工具:Maven Web应用服务器:Tomcat 前端技术:Vue、 后端技术:SpringBoot框架 三、运行环境 操作系统:Windows、macOS都可以 JDK版本:JDK1.8以上版本都可以 开发工具:IDEA、Ecplise都可以 数据库: MySQL 5.7/8.0版本均可 Tomcat:7.x、8.x、9.x版本均可 Maven:任意版本都可以

    1_媒工十佳决赛RUNDOWN 2.xlsx

    1_媒工十佳决赛RUNDOWN 2.xlsx

    c#联合opencvsharp开发的视觉源码程序包含模板匹配,找线找圆,预处理等功能全部源码,包含图像显示控件,绘制roi

    c#联合opencvsharp开发的视觉源码程序 包含模板匹配,找线找圆,预处理等功能 全部源码,包含图像显示控件,绘制roi

    基于STC89C52单片机的信号发生器20172086102何雨莉_3.zip

    基于STC89C52单片机的信号发生器20172086102何雨莉_3.zip

    2023年西南大学网络与继续教育学院楼宇自动化作业答案.docx

    2023年西南大学网络与继续教育学院楼宇自动化作业答案.docx

    基于SpringBoot与Vue的智慧养老手表管理系统:家庭树、健康数据监控及权限控制

    内容概要:本文详细介绍了基于SpringBoot和Vue构建的智慧养老手表管理系统的关键技术和实现细节。系统主要由家长和养老院管理员两种角色组成,家长可以通过智能手表实时查看老人的健康数据,而管理员则可以进行更全面的数据管理和权限控制。文中重点讨论了家庭树功能的实现,包括使用MyBatis的动态SQL处理复杂的家庭关系查询,以及前端用Vue的el-tree组件展示家庭树结构。健康数据监控方面,系统利用SpringBoot的@Scheduled定时任务生成日报,并通过ECharts进行数据可视化。此外,还涉及了权限控制、加好友功能、熔断机制等多个方面的技术实现。 适合人群:具有一定编程经验的开发者,尤其是熟悉SpringBoot和Vue框架的工程师。 使用场景及目标:适用于开发类似智慧养老系统的项目,旨在提高老年人健康管理的效率和安全性。目标是通过智能手表实时监测老人健康状况,提供及时的健康报告和预警,同时确保系统的稳定性和安全性。 其他说明:文中提到的技术细节对于理解和实现类似的前后端分离架构非常有帮助,特别是关于MySQL 5.7的使用和优化,以及如何处理第三方设备接口的不稳定问题。

    2023年计算机二级资料.doc

    2023年计算机二级资料.doc

    2023年电大数据结构形成性考核册.doc

    2023年电大数据结构形成性考核册.doc

    软考-网络工程师易错100题 2025年

    网络工程师易错100题 2025年

    2023年电子商务技能竞赛方案.doc

    2023年电子商务技能竞赛方案.doc

    2024年大数据软件项目深度研究分析报告.docx

    2024年大数据软件项目深度研究分析报告.docx

    基于Matlab小波变换与凯伦布尔变换的输电线路单相接地故障双端行波测距方法

    内容概要:本文详细介绍了利用Matlab/Simulink构建输电线路单相接地故障测距模型的方法。首先,通过建立110kV输电线路的Simulink模型,采用Bergeron模型作为线路参数。接着,利用小波变换提取故障行波的模极大值点,结合凯伦布尔变换消除工频分量,从而精确计算故障位置。文中提供了详细的代码实现步骤,包括信号预处理、小波分解、模极大值检测以及时间差计算等。此外,还讨论了常见调试经验和避坑指南,如采样率设置、接地电阻限制等。最后,通过多个测试案例验证了模型的有效性和准确性。 适合人群:从事电力系统故障诊断的研究人员和技术人员,尤其是对小波变换和凯伦布尔变换感兴趣的工程师。 使用场景及目标:适用于输电线路单相接地故障的精确定位,旨在提高电力系统的可靠性和维护效率。通过掌握本文提供的方法,技术人员能够快速准确地找到故障点,减少停电时间和维修成本。 其他说明:本文不仅提供了理论解释,还包括具体的代码实现和调试建议,有助于读者更好地理解和应用所学知识。

    含分布式电源的IEEE33节点配电网牛拉法潮流计算解析

    内容概要:本文详细介绍了基于牛拉法的含分布式电源(如风能和太阳能)的IEEE33节点配电网潮流计算程序。首先解释了分布式电源的节点类型转换,将光伏处理为PQ节点,风机处理为PV节点。接着阐述了导纳矩阵的构建方法及其对分布式电源的影响,特别是变压器分接头的处理。然后深入探讨了牛拉法的核心迭代过程,包括功率不平衡量的计算、雅可比矩阵的构建以及修正方程的求解。此外,文章还讨论了风光出力波动的处理方法,并分享了一些常见的陷阱及解决方案,如PV节点振荡、孤岛检测和并行计算优化。最后,通过具体实例展示了程序的运行结果,强调了分布式电源接入位置的重要性。 适合人群:从事电力系统仿真、配电网规划与设计的研究人员和技术人员。 使用场景及目标:适用于研究分布式电源对接入配电网的影响,帮助理解和优化含分布式电源的配电网运行特性,提高潮流计算的准确性。 其他说明:文中提供了详细的代码片段和实践经验,有助于读者更好地理解和应用相关理论和技术。同时,文章指出了实际应用中的一些注意事项,如节点类型切换、变压器变比处理等,使读者能够避免常见错误。

    单片机最小工作系统构建概述.pptx

    单片机最小工作系统构建概述.pptx

    2023年全国计算机二级c语言考试真题详细解答系列一.doc

    2023年全国计算机二级c语言考试真题详细解答系列一.doc

Global site tag (gtag.js) - Google Analytics