版本:mongodb3.4 ;

分片:

  工作顺序:router=>config=>shards

 一,配置config:

   3.4中config必须为replSet。下面配置两个config。

   mongod --configsvr -dbpath= ..   -logpath=..   replSet=myConfig -port=3001 --fork;

     mongod --configsvr -dbpath=..    -logpaht=..  replSet=myConfig  -port=3002 --fork;

   进入config,mongo --port 3001,配置副本集:

   var config={

      _id:'myConfig',

       configsvr:true,

       memeber:[{_id:0,host:155.155.1.104:3001},   {_id:0,host:155.155.1.104:3002}]

    }

    rs.initiate(config);

    官方建议三个,我们这里只有两个。host,不能为127.0.0.1,或者localhost。所以我配置为局域网的地址了。

二,配置shard:

   mongod --shardsvr dbpath=.. -logpath=.. -port=4001 -nojournal --fork

   mongod --shardsvr dbpath=..  -logpath=.. -port=4002 -nojournal --fork

  生存环境下建议shard为replSet,这里姑且就为mongod吧

三,配置router:

  mongos -configdb=myConfig/155.155.1.104:3001,155.155.1.104:3002 -port=3000

  将config副本集写进去

四,定义shard:

  进入mongos :

         mongo -host=155.155.1.104  -port=3000

  use admin;

  添加分片:

      sh.addShard( '155.155.1.104:4001');   sh.addShard('155.155.1.104:4002');

  激活一个db:

      sh.enableSharding('test');

  为该db中的collection添加规则:

      sh.shardCollection('test.collection1',{_id:'hashed'})

 

文档连接:

文档引用

  官方使用的方法,将一个document 的field指向另一个document的_id。

树形结构:

  子定义一个parent。父定义一个children。将子父的一个filed放入其中。可以建立索引。更遥远的可以定义ancestor。

树形路径:

  定义document的一个filed为string型  ',path,path1,path2'。根据树形结构,写放路径。

二叉树路径:

  每个document,拥有一个left,right为number型。根据left,right和二叉树结构,可以遍历其子document。

数据引用:

  将document的一个filed定义为DBRef,其结构如下:

        creator:{

         $ref:  //指向collection;                        =》namespace  //在node.js中获得DBRef时,所对应的属性。

          $db:  //指向db;                                =》db

          $id: //指向collection.document._id; =》 oid

        }

mongodb does not support joins。

介绍下mongoose population:

  连接两个文档,并通过父文档find子文档的属性:

var parentSchema=new Schema({
name:String,
children:{type:Schema.Types.ObjectId, ref:'children'}
})
var childSchema=new Schema({
name:String
}) // 在父schema中定义children,指向子document的_id,使用ref指向该collection。
//下面是创建这两个document,分别在parent和children这两个collection中。 var parentModel=mongoose.model('parent',parentSchema);
var childrenModel=mongoose.model('children',childSchema); var childOne=new ChildrenModel({ name : ' B' });
childOne.save(val=>{
(new parentModel({
name:' A',
children:childOne._id
})) .save();
}) //这样就将两个document分别写入其各自的collection 中了。
//下面是使用他们; parentModel.findOne({name:'A'}).populate('children') //populate 中的值为parentSchema的children属性.
.exec((err,doc)=>{
console.log(doc.children.name); //show 'B'
})

  update

parentModel.findOne({name:'A'}).populate('children')
.exec((err,doc)=>{
doc.children= ...; //重新指定一个document。可以是document._id。也可以直接传递document
doc.save(callback);
})

  很遗憾的是不能通过doc.children.name='';doc.save();这种方式来更改children document内的属性。

动态连接:

var parentSchem=new Schema({
name:String,
children:[ {
kind:String,
item:{type:ObjectId , refPath: 'children.kind '} } ]
}) //refPath指向children.kind。通过kind的值,来定义类似之前ref的值;
//使用: parentMode.findOne({name:'A'}).populate('children.item').exec()

  ref的值是不能直接更改的。所以通过更改kind的值,可以更改连接的子文档。

 

mongodb笔记(一) 分片 &&文档连接的更多相关文章

  1. MongoDB改动、删除文档的域属性实例

    MongoDB改动.删除文档的域属性实例 在站点的开发中,可能最初的设计不合理.或者后期业务的变更,会造成文档结构会有些无用的属性.须要去删除或改动.因为MongoDB 是无 Schema 的,不像关 ...

  2. MongoDB,无模式文档型数据库简介

    MongoDB的名字源自一个形容词humongous(巨大无比的),在向上扩展和快速处理大数据量方面,它会损失一些精度,在旧金山举行的MondoDB大会上,Merriman说:“你不适宜用它来处理复杂 ...

  3. mongodb查询内嵌文档

    mongodb查询内嵌文档   假设有这样一个文档: db.XXX.remove(); db.XXX.insert({"id":1, "members":[{& ...

  4. Spring Data MongoDB 四:基本文档改动(update)(一)

    Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 二:MongoDB加入.删除.改动 一.简单介绍 Spring Data  Mo ...

  5. Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)

    Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...

  6. MongoDB和Redis-NoSQL数据库-文档型-内存型

    1NoSQL简述 CAP(Consistency,Availabiity,Partitiontolerance)理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时 ...

  7. Mongodb 笔记07 分片、配置分片、选择片键、分片管理

    分片 1. 分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程.有时也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机就可以 ...

  8. MongoDB学习(查找文档和其他数据查找操作)

    理解Cursor对象和查询运算符 cursor对象 cursor对象相当于一个指针,可通过迭代它来访问MongdoDB数据库中的一组对象. 在使用 find() 方法查询时,返回的并非实际文档,而是一 ...

  9. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)

    一.简单介绍 Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...

随机推荐

  1. Drupal 8 提供REST服务实例

    drupal8 的核心模块已经支持REST服务. 这样的话使用drupal 对外提供web service 变的简单了. 测试一下d8 的webservice : extend 中的 依赖模块:全部启 ...

  2. css中的clear:both,display:flex;

    介绍两者一起讨论的原因: 在明天就国庆的日子里陪着程序员的只有代码,啤酒,还有音乐,然后就是灯光下默默陪伴自己的影子.好了,不矫情了. -------------------------------- ...

  3. Django组件 - cookie、session、用户认证组件

    一.cookie 1.会话跟踪技术 1)什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话 ...

  4. Andrew Ng机器学习编程作业:Multi-class Classification and Neural Networks

    作业文件 machine-learning-ex3 1. 多类分类(Multi-class Classification) 在这一部分练习,我们将会使用逻辑回归和神经网络两种方法来识别手写体数字0到9 ...

  5. selector模块

    selector selectors模块,此模块允许高级和高效的I / O多路复用,构建在select模块原语上.鼓励用户使用此模块,除非他们需要精确控制所使用的操作系统级原语.( 默认使用epoll ...

  6. 关于shared pool的深入探讨(六)-高Latch竞争案例

    研究了几天shared pool,没想到忽然就撞到问题上来了.作为一个案例写出来给大家参考一下吧. 问题起因是公司做短信群发,就是那个18万买的4000字的短信小说(嘘,小声点,我也没看过...).群 ...

  7. Python之初识函数(Day11)

    一.函数的定义与调用 总结一: 定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":". def 是固定的,不能变,必须是连续的def三个字母,不能分开... ...

  8. python全栈开发从入门到放弃之网络基础

    一.操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才 ...

  9. Linux系统配置VI或VIM的技巧

    Linux系统配置VI或VIM的技巧作者:IT专家网论坛出处:IT专家网论坛2008-10-28 11:08配置VI和VIM的颜色显示,使它能够高亮度显示一些特别的单词,这对编写程序很有用⋯⋯ 1.V ...

  10. leetcode每日一题——反转整数

    题目: 反转整数 难度: 简单 描述: 给定一个 32 位有符号整数,将整数中的数字进行反转. 解法: class Solution { public int reverse(int x) { //i ...