MongoDB常用操作

1.查看帮助命令

  help

  db.yourColl.help();

  db.youColl.find().help();

  db.help():显示数据库操作命令,里面有很多的命令 

  db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 

  rs.help();

2.查看数据库相关信息

  show dbs:显示数据库列表 
  show collections:显示当前数据库中的集合(类似关系数据库中的表) 
  show users:显示用户

3.对集合的插入,查找

  db.foo.insert({aa:11})

  db.foo.find() 查找所有记录

  db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1

4.切换数据库

   use <db name>:切换当前数据库,这和MS-SQL里面的意思一样 

   如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一个名叫“myTest”的数据库。

5.删除数据库

   db.dropDatabase();

6.从指定主机上克隆数据库

   db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库

7.从指定的机器上复制指定数据库数据到某个数据库

   db.copyDatabase("mydb", "myTest", "127.0.0.1");将本机的mydb的数据复制到myTest数据库中

8.修复当前数据库

   db.repairDatabase();

9.查看当前使用的数据库

   db.getName();

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

10.显示当前db状态

   db.stats(); 

11.当前db版本

   db.version(); //3.0.2

12、查看当前db的链接机器地址

   db.getMongo(); 

Collection聚集集合相关操作

1、创建一个聚集集合(table)

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

2、得到指定名称的聚集集合(table)

  db.getCollection("account"); //列出指定名字的集合,如:myTest.foo

3、得到当前db的所有聚集集合

  db.getCollectionNames(); //列出所有聚集集合的名,如:["foo","user","stu"]

4、显示当前db所有聚集索引的状态

  db.printCollectionStats(); //打印出所有集合的状态信息

用户操作

1.创建用户

use admin 
db.createUser( { user: "adminUserName", pwd: "userPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin"} ] } 
)

role:可用的角色有:"dbOwner","userAdminAnyDatabase","root","read","userAdmin"等

2.删除用户

use test
db.system.users.remove({user:"test"});
或者
db.dropUser("test")
db.removeUser("userName");

3.数据库认证、安全模式

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

其他
1、查询之前的错误信息
db.getPrevError();
2、清除错误记录
db.resetError();
对聚集集合的信息的查看(相当于是对表的信息的查看)
1. db.yourColl.help(); //查看可以操作集合的方法,命令

2. db.yourColl.count(); //当前集合的数据条数

3. db.userInfo.dataSize(); //数据空间大小

4. db db.userInfo.getDB(); //当前聚集集合所在的db

5. db.userInfo.stats(); //当前聚集的状态

6. db.userInfo.totalSize(); //聚集集合总大小

7. db.userInfo.storageSize(); //储存空间大小

8. db.userInfo.getShardVersion() //Shard版本信息

9. db.userInfo.renameCollection("users"); //将userInfo重命名为users

10.db.userInfo.drop(); //删除当前聚集集合

对聚集集合的数据查询

1. db.user.find() ; //默认查询20条

DBQuery.shellBatchSize= 50; //设置每页显示50条
如果还有数据没有显示完,可用键入“it”命令,迭代查询后续记录。

2. db.userInfo.distinct("name");
//相当于select distict name from userInfo;

3.db.userInfo.find({"age": 22}) //查询age作为key,值为22的记录,可以不加""
//相当于: select * from userInfo where age = 22;

4. db.userInfo.find({age: {$gt: 22}});
//相当于:select * from userInfo where age >22;

5. db.userInfo.find({age: {$lt: 22}});
//相当于:select * from userInfo where age <22;

//注:查询条件中,操作符和条件值放在一个对象中,如{age: {$lt: 22}};而在更新数据中,列名和数据放在一个对象中,如{$set : {name: "zhangshan"}},而or查询又比较特殊,它有点类似于更新操作
//如
{$or: [{age: 22}, {age: 25}]},它这里给的是对象数组
6.db.userInfo.find({age: {$gte: 23, $lte: 26}});
//查询age >= 23 并且 age <= 26

7.db.userInfo.find({name: /mongo/});
//模糊查找,相当于'%%'

8.db.userInfo.find({name: /^mongo/});
//模糊查找,name的值必须是以mongo开头,相当于'mongo%'

//注:find()方法中的第一个对象是查询条件;第二个对象是指定显示的列名,1和true代表显示,0和false代表去除这一列,其余列全部显示,也就是说,如果指定name:false,那么就不能再指定显示其它列,如age:1,否则,将报错
9.db.userInfo.find({}, {name: 1, age: 1});  
//相当于:select name, age from userInfo where age >25;

10.db.userInfo.find({name: 'zhangsan', age: 22});
//相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’

11.db.userInfo.find().limit(5); //查询前5条数据

12.db.userInfo.find().skip(10); //skip()表示跳过,也就是说跳过前10条记录

13.db.userInfo.find().limit(10).skip(5); //从第5条记录后,查询出10条记录,可用于分页,limit是pageSize,skip是第几页*pageSize
14.db.userInfo.find({$or: [{age: 22}, {age: 25}]});
//相当于:select * from userInfo where age = 22 or age = 25;
15.db.userInfo.findOne();  //查询第一条数据
16.db.userInfo.find({age: {$gte: 25}}).count();  //统计记录条数

17.db.userInfo.find({sex: {$exists: true}}).count(); //统计存在sex列的记录数,可以同时指定多个存在的列

排序

1.升序:db.userInfo.find().sort({age: 1});
2.降序:db.userInfo.find().sort({age: -1});

注:排序这里只能使用1和-1.不能使用true和false


索引
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}); //可以随意添加列
db.users.insert({name:'22',age:22})

2.修改
db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true); //前面一个对象是查询条件,后面一个对象是要修改的列

db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true); //在原有的基础上增加
//
相当于:update users set age = age + 50 where name = ‘Lisi’;


3.删除
db.users.remove({age: 132}); //删除age=132的记录

4.按条件删除(也就是先查出来,排好序再删除
db.users.findAndModify({
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true,
   new : true  
}); 
db.runCommand({ findandmodify : "users", 
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});
注:1.remove和update两个必须指定一个
2.不是对查询到的所有数据都更新或删除,而是对第一个记录更新或删除
3.若没有指定new:true,则返回修改前的对象,若指定了new:true,则返回修改后的对象
4.若为remove操作,则返回被删除的对象,不能指定new:true,否则,将报错。
5.若没有查询到数据,则返回null
语句块操作  

注:语法类似c和javascript,java,区分大小写
1.打印输出语句
print("Hello World!");

2.将一个对象转换成json
tojson(new Object())  //打印一个空对象,不是null, 而是{}
tojson(new Object({name:"zhang",age:22})) // {"name":"zhang","age":22}

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

4.遍历查询结果

1).游标
var cursor = db.users.find(); //游标
 while (cursor.hasNext()) { 
    printjson(cursor.next()); 
}

注:游标,也可以当作数组来使用
例如:cursor[4];

获取数组的长度:cursor.length()或cursor.count()
for (var i = 0, len = c.length(); i < len; i++)
printjson(c[i]);  

2).forEach循环
db.users.find().forEach(printjson);
forEach中必须传递一个函数来处理每条迭代的数据信息

向forEach()传递自定义函数
db.users.find({age:24}).forEach(function(x) {print(tojson(x));});

5.把游标转换成数组
 var arr = db.users.find().toArray();
 printjson(arr[2]);










 



转载于:https://www.cnblogs.com/yangwenbin/p/4449495.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linus Torvalds: 成功的项目源于99%的汗水与1%的创新

2017年2月15日&#xff0c;在加利福尼亚州的开源领袖峰会上&#xff0c;由Linux基金会执行董事Jim Zemlin进行的一次采访中&#xff0c;Torvalds讨论了他如何管理Linux内核的开发以及他对工作的态度。\\\\Linus Torvalds认为&#xff0c;科技行业对创新的颂扬是一种自鸣得意&am…

LeetCode之Fizz Buzz

1、题目 Write a program that outputs the string representation of numbers from 1 to n. But for multiples of three it should output “Fizz” instead of the number and for the multiples of five output “Buzz”. For numbers which are multiples of both three a…

Large sum

聪明的办法是想&#xff1a;求前10位&#xff0c;那只要前8位加起来&#xff0c;进2位就OK。 本的办法&#xff0c;就是真的加起来&#xff0c;截前面10位。如我。 numList str.split() sum 0 for i in range(0,len(numList)):sum int(numList[i][0:50])print i,numList[i][…

.NET6之MiniAPI(十六):数据保护

对于web&#xff0c;安全是一个永久的话题&#xff0c;所以ASP.NET Core数据保护提供了一个简单&#xff0c;易用的加密API&#xff0c;可以用来保护数据&#xff0c;密钥管理和轮换。ASP.NET Core的数据保护是根据本机的一个key来生成加密码&#xff0c;然后再用这个key来解密…

linux下安装配置DHCP服务器

前提是已经安装了 core 及 base 两个组 12345# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.4 (Santiago) # uname -a Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux修改…

java ecc 加密_java-信息安全(十一)-非对称加密算法002-ECC,签名003-ECDSA签名

一、概述ECC算法(Elliptic curve cryptography&#xff0c;椭圆曲线密码学)椭圆加密算法(ECC)是一种公钥加密体制&#xff0c;最初由Koblitz和Miller两人于1985年提出&#xff0c;其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。是目前已知的公…

网络数据嗅探工具HexInject

网络数据嗅探工具HexInject网络数据嗅探是渗透测试工作的重要组成部分。通过嗅探&#xff0c;渗透人员可以了解足够多的内容。极端情况下&#xff0c;只要通过嗅探&#xff0c;就可以完成整个任务&#xff0c;如嗅探到支持网络登录的管理员帐号和密码。为了实现这个功能&#x…

.NET 云原生架构师训练营(权限系统 代码实现 ActionAccess)--学习笔记

▲ 点击上方“DotNet NB”关注公众号回复“1”获取开发者路线图学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第188篇原创文章目录开发任务代码实现开发任务DotNetNB.Security.Core&#xff1a;定义 core&#xff0c;models&#xff0c;Istore&#xff1b;实现 defaul…

小米暑期实习在线笔试2015-04-25

周五晚上参加了小米的全国在线笔试&#xff0c;使用的是百一测评&#xff0c;不得不说&#xff0c;这是我参加过的最不靠谱的在线笔试。 先来描述题目&#xff0c;再来吐槽&#xff0c;在线笔试就是三个必做题和两个附加题。 必做题是三个算法题&#xff0c; 第一题是判断两个十…

表格列mouse经过时高亮显示

前几天Insus.NET有练习《表格行mouse经过时高亮显示》http://www.cnblogs.com/insus/p/3715733.html &#xff0c;今天有奇想&#xff0c;是否可以实现mouse经过表的列时&#xff0c;整列高亮呢&#xff1f;Insus.NET就在前一示例中&#xff0c;修心jQuery来练习。 修改.mouseo…

REDIS调优

2019独角兽企业重金招聘Python工程师标准>>> 1、优先使用批量操作&#xff0c;例如hset&#xff0c; 2、批量命令用管道技术 3、因为redis是单线程的防止慢命令阻塞 4、可以搭建主从读写分离集群&#xff0c;费时的操作都移到读服务 用slowlog get 查看耗时操作 转载…

socket.io服务端是java_SpringBoot(23) 集成socket.io服务端和客户端实现通信

Slf4jService(value "socketIOService")public class SocketIOServiceImpl implements ISocketIOService {/*** 存放已连接的客户端*/private static Map clientMap new ConcurrentHashMap<>();/*** 自定义事件push_data_event,用于服务端与客户端通信*/priv…

LeetCode之Next Greater Element I

1、题目 You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1s elements in the corresponding places of nums2.The Next Greater Number of a number x in nums1 is …

分库分表下极致的优化

题外话这边说一句题外话,就是ShardingCore目前已经正式加入 NCC 开源组织了,也是希望框架和社区能发展的越来越好,希望为更多.netter提供解决方案和开源组件介绍依照惯例首先介绍本期主角:ShardingCore 一款ef-core下高性能、轻量级针对分表分库读写分离的解决方案&#xff0c;…

网页小要求

1. 制作出的网页要求图文并茂&#xff0c;有自己设计的网站Logo图标&#xff1b;文字要有字体格式和颜色上的变化&#xff0c;图形要与网页的内容相关。2. 页面要求使用DIVCSS进行页面设计布局&#xff0c;至少 4个页面&#xff08;图像文件不能太大&#xff09;&…

关于photoshop

photoshop的常见快捷键&#xff1a;&#xff08;只写了一部分&#xff0c;还有的实用快捷键不知道&#xff09; 矩形、椭圆选框工具 M移动工具 V 套索、多边形套索、磁性套索 L 魔棒工具 W 裁剪工具 C 切片工具、切片选择工具 K 喷枪工具 J 画笔工具、铅笔工具 B 像皮图章、图案…

linux(centos) NET模式网络配置

2019独角兽企业重金招聘Python工程师标准>>> linux虚拟机一般使用桥接和net模式&#xff0c;但是由于桥接在不同的网络环境中&#xff0c;需要重新配置&#xff0c;所以建议使用net模式&#xff0c;net模式的配置步骤如下&#xff1a; 虚拟机网络连接使用NAT模式&am…

LeetCode之Island Perimeter

1、题目 You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represents water. Grid cells are connected horizontally/vertically (not diagonally). The grid is completely surrounded by water, and there is exactly one is…

java获取tomcat目录结构_tomcat目录结构简介_动力节点Java学院整理

tomcat目录结构简介如果我们有一个web应用&#xff0c;名称为“mail”(同时也是web应用所在目录的名称)&#xff0c;那么其目录内不同类型的文件应该服从如下放置的规则&#xff1a;一般来讲&#xff1a;对于html、jsp、css、js文件等&#xff0c;可以直接放置在web应用所在目录…

Linux和Windows下部署BeetleX服务网关

有朋友希望写一篇BeetleX服务网关部署到Linux和windows下并以服务的方式运行的介绍文章。接下详细介绍如何做并简单介绍一下网的使用。首先需要在官网(beetlex-io.com)下载对应版本的BeetleX服务网关&#xff08;现阶段只支持linux64和windows64&#xff09;&#xff0c;下载完…