mongo实践-通过js shell操作mongo

保存命令:

j={name:"wangjingjing",age:15}

db.user.save(j);

查询命令:

var cursor = db.user.find();

while(cursor.hasNext())printJson(cursor.next());

printJson(cursor[4]);

var arr = cursor.toArray();

db.user.find({name:"wangjingjing"});

//select age from user where name='wangjingjing'

db.user.find({name:"wangjingjing"},{age:true});

db.user.findOne();

db.user.find().limit(3);

修改命令:

db.user.update({name:"wangjingjing"},{$set:{name:"jingjing"}});

db.user.update({name:"wangjingjing"},{$inc:{age:10}}); //给age增加10

db.user.update({name:"wangjingjing"},{$push:{habit:["basketball","football"]}});

删除命令:

db.user.remove({name:"jingjing"})

高级查询命令:

db.user.find({x:{$gt:3}}); x>3

db.user.find({x:{$lt:3}}); x<3

db.user.find({x:{$gte:3}}); x>=3

db.user.find({x:{$lte:3}}); x<=3

db.user.find({x:{$lte:3,$gte:2}}); 2<=x<=3

var x = {x:[3,4,5]}

db.user.save(x);

db.user.find({x:{$all:[3,4]}}) 匹配

db.user.find({x:{$all:[3,4,6]}}) 不匹配

db.user.find({x:{$in:[3,4,6]}}) 匹配

db.user.find({x:{$nin:[3,4,6]}}) 匹配

db.user.find({x:{$exsits:true}}) 匹配有包含x的属性

db.user.find({x:{$mod:[6,1]}}) 取模6等于1

db.user.find({x:{$ne:1}}) x!=1

db.user.find({$or:[{name:"jing"],[age:10]}) 或操作

db.user.find({x:{$size:3}}) 数组x的元素个数为3

db.user.find().skip(1).limit(1).count(true); 第二个记录

db.user.find().sort({age:1});升序

db.user.find().sort({age:-1});降序

导出文件

mongoexport -d user -c user -o user.bat

导入文件

mongoimport -d user -c user user.bat

备份文件

mongodump -d user -o my_user_dump

恢复文件

mongorestore -d user my_user_dump\user\

安全访问

mongod --bind_ip 192.168.1.103 --port 28018

mongo 192.168.1.103:28018

建立索引

db.user.ensureIndex({age:1},{background:true}); 升序

db.user.getIndexes();

解释执行

db.user.find().explain()

复制集

Replica Set使用指南(在单机上配置)

简介:

一个Replica-Set是在一组N个mongod服务一起协作来进行后援支持。

搭建一个replica-set需要两个步骤:在每个节点上启动服务;初始化这个set。

标准模式下,1个set包含3个节点。我们现在就在同一个服务器上搭建一个。

一旦mongod服务节点都启动了,我们需要一个指令来初始化这个set。几秒钟之后,三个节点中会选择出一个

主控节点(master node),之后我们就可以向这个set中写入或者查询数据了。

步骤一:

分别为3个节点分配数据存放的位置空间

$  mkdir -p /data/r0

$  mkdir -p /data/r1

$  mkdir -p /data/r2

之后,使用 --replSet 参数启动mongod服务,这个参数需要我们指定replica-set的名称,这里我们称我们的这个set为“foo”

$ mongod --replSet foo --port 27017 --dbpath /data/r0

$ mongod --replSet foo --port 27018 --dbpath /data/r1

$ mongod --replSet foo --port 27019 --dbpath /data/r2

现在3个节点都跑起来了。这时,每个节点应该都打出如下的警告信息:

————————

Mon Aug  2 11:30:19 [startReplSets] replSet can't get local.

system.replset config from self or any seed (EMPTYCONFIG)

————————

不要紧张,这是因为我们还没有初始化这个set.

步骤二:

我们可以从任意3个节点中的一个来运行 replSetInitiate 命令来初始化这个set.

[kyle@arete ~$]$ mongo localhost:27017

MongoDB shell version: 1.6.3

connecting to: localhost:27017/test

> config = {_id: 'foo', members: [

{_id: 0, host: 'localhost:27017'},

{_id: 1, host: 'localhost:27018'},

{_id: 2, host: 'localhost:27019'}]

}

> rs.initiate(config);

{

"info" : "Config now saved locally.  Should come online in about a minute.",

"ok" : 1

}

我们需要配置config这个对象,指明set的名称和这个set下的成员。然后将config传递给rs.initiate().

如果到这里一切都顺利的话,我们会得要一个信息说:这个set会在1分钟内启动完成。在这个时间段内,有一个

节点会被选择为主控节点(master节点)。

如果想查看这个set的当前状态的话,使用rs.status这个命令:

> rs.status()

{

"set" : "foo",

"date" : "Mon Aug 02 2010 11:39:08 GMT-0400 (EDT)",

"myState" : 1,

"members" : [

{

"name" : "arete.local:27017",

"self" : true,

},

{

"name" : "localhost:27019",

"health" : 1,

"uptime" : 101,

"lastHeartbeat" : "Mon Aug 02 2010 11:39:07 GMT-0400",

},

{

"name" : "localhost:27018",

"health" : 1,

"uptime" : 107,

"lastHeartbeat" : "Mon Aug 02 2010 11:39:07 GMT-0400",

}

],

"ok" : 1

}

这里有个值"myState",如果这个值为1,说明是主控节点(master);如果是 2 ,说明是从属节点(slave).

在同一时刻,每组 Replica Sets 只有一个 Primary,用于接受写操作。而后会异步复制到其他成员数据库中。一旦
primary 死掉,会自动投票选出接任的 primary 来,原服务器恢复后成为普通成员。如果数据尚未从先前的 primary
复制到成员服务器,有可能会丢失数据。

PRIMARY> db.test.insert({“name”:”foobar”,”age”:25})

PRIMARY> db.test.find()

{ “_id” : ObjectId(“4f4f38fc47db2bfa5ceb2aee”), “name” : “foobar”, “age” : 25 }

SECONDARY> db.test.find()

error: { “$err” : “not master and slaveok=false”, “code” : 13435 }

SECONDARY> db.test.insert({“name”:”foobar”,”age”:25})

not master

在主库上设置slaveok=ok (经过试验,发现需要在从库上设置ok)

PRIMARY> db.getMongo().setSlaveOk()

SECONDARY> use test

switched to db test

SECONDARY> db.test.find()

{ “_id” : ObjectId(“4f4f38fc47db2bfa5ceb2aee”), “name” : “foobar”, “age” : 25 }

然后kill掉主库,会候选出一个作为主库,当修复后,就变成从库了

插入数据时生成的id分为四个段 时间戳、主机号、进程号、计数器

http://www.myexception.cn/javascript/1227152.html

mongo实践-透过js shell操作mongo的更多相关文章

  1. mongo的runCommand与集合操作函数的关系

    除了特殊注释外,本文的测试结果均基于 spring-data-mongodb:1.10.6.RELEASE(spring-boot-starter:1.5.6.RELEASE),MongoDB 3.0 ...

  2. java拾遗5----Java操作Mongo入门

    Java操作Mongo入门 参考: http://api.mongodb.com/java/3.2/ http://www.runoob.com/mongodb/mongodb-java.html h ...

  3. 每篇半小时1天入门MongoDB——2.MongoDB环境变量配置和Shell操作

    上一篇:每篇半小时1天入门MongoDB——1.MongoDB介绍和安装 配置环境变量 Win10系统为例 右键单击“此电脑”——属性——高级系统设置——高级——环境变量,添加C:\Program F ...

  4. MongoDB的Shell操作

    前言 本文从介绍了MongoShell 的配置.脚本.数据类型和其他指令. MongoShell - 简介 MongoShell是一个互动的JavaScript接口的MongoDB,可以使用Mongo ...

  5. MongoDB shell操作

    shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的.使用shell 命令,需要启动mongo.exe. 常用shell命令如下: 1. ...

  6. node.js高效操作mongodb

    node.js高效操作mongodb Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为Jav ...

  7. shell 编程 && bash 简介(shell 变量、shell操作环境、数据流重导向、管线命令、shell script)

    如何学习一门编程语言 数据类型 运算符 关键字 1 认识BASH 这个shell linux是操作系统核心,用户通过shell与核心进行沟通,达到我们想要的目的.硬件.核心.用户之间的关系: 原理:所 ...

  8. js简单操作Cookie

    贴一段js简单操作Cookie的代码: //获取指定名称的cookie的值 function getCookie(objName) { var arrStr = document.cookie.spl ...

  9. Mongo DB Study: first face with mongo DB

    Mongo DB Study: first face with mongo DB 1.  study methods: 1.  Translate: I am the mongo DB organiz ...

随机推荐

  1. vue项目开发中踩过的坑

    一.路由 这两天移动端的同事在研究vue,跟我说看着我的项目做的,子路由访问的时候是空白的,我第一反应是,不会模块没加载进来吧,还是....此处省略一千字... 废话不多说上代码 路由代码 { pat ...

  2. P2597 [ZJOI2012]灾难(倍增LCA+拓扑排序)

    传送门 据大佬说这玩意儿好像叫灾难树还是灭绝树? 我们先按建图,设点$u$的食物有$x[1]...x[k]$,即在图中这些点都有一条指向它的边 以样例来说,对于人,羊和牛都有一条指向它的边,然而不管是 ...

  3. laravel 模型 $table $guarded $hidden

     首先以App\User模型为例 1.$table属性 表名,对应数据库中的表名 2.guarded)属性 guarded表示在create()方法中不能被赋值的字段 3.$hidden属性 $hid ...

  4. MVC的学习-EF的认识

    1.什么是EF EF又称持久层框架:平时C#定义的变量是保存到内存中的,一断电就没有了.而持久的意思是数据保存到硬盘盘里(数据库的sql查询是在硬盘里进行的,所以速度很慢).EF帮我们将一个对象保存到 ...

  5. CSS 按钮特效(二)

    1 案例 2. HTML 代码 <div class="arrow arrow-left-middle"> arrow-left-middle </div> ...

  6. Android常用依赖库搜集

    图片处理 CircleImageView Git地址:https://github.com/hdodenhof/CircleImageView 图片依赖库 glide Git地址:https://gi ...

  7. [转] Redis在windows下安装过程

    转载自(http://www.cnblogs.com/M-LittleBird/p/5902850.html) 一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的win ...

  8. PHP——基本使用(二)

    PHP与Apache Apache服务器在接受到客户端请求的时候,根据客户端所请求的文件的类型,然后去问模块能否处理此文件,php作为模块之一有可能可以处理此文件,处理之后将数据再返回给apache, ...

  9. JAVA环境变量配置后未变动配置失效处理

    环境: Windows 7 x64 配置方案来源于教程: http://www.mamicode.com/info-detail-563355.html 配置方案出现的问题: 正确配置JAVA环境变量 ...

  10. jmeter 常见问题一(url重定向)

    刚接触JMeter,想把学习过程中遇到的一些问题,记录下来因为是新接触,所以很多东西都在摸索中! 使用Badboy录制了公司一个项目的登录功能导入到JMeter后,执行场景,发现登录校验成功,但后续的 ...