mongodb笔记(一) 分片 &&文档连接
版本: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笔记(一) 分片 &&文档连接的更多相关文章
- MongoDB改动、删除文档的域属性实例
MongoDB改动.删除文档的域属性实例 在站点的开发中,可能最初的设计不合理.或者后期业务的变更,会造成文档结构会有些无用的属性.须要去删除或改动.因为MongoDB 是无 Schema 的,不像关 ...
- MongoDB,无模式文档型数据库简介
MongoDB的名字源自一个形容词humongous(巨大无比的),在向上扩展和快速处理大数据量方面,它会损失一些精度,在旧金山举行的MondoDB大会上,Merriman说:“你不适宜用它来处理复杂 ...
- mongodb查询内嵌文档
mongodb查询内嵌文档 假设有这样一个文档: db.XXX.remove(); db.XXX.insert({"id":1, "members":[{& ...
- Spring Data MongoDB 四:基本文档改动(update)(一)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 二:MongoDB加入.删除.改动 一.简单介绍 Spring Data Mo ...
- Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...
- MongoDB和Redis-NoSQL数据库-文档型-内存型
1NoSQL简述 CAP(Consistency,Availabiity,Partitiontolerance)理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时 ...
- Mongodb 笔记07 分片、配置分片、选择片键、分片管理
分片 1. 分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程.有时也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机就可以 ...
- MongoDB学习(查找文档和其他数据查找操作)
理解Cursor对象和查询运算符 cursor对象 cursor对象相当于一个指针,可通过迭代它来访问MongdoDB数据库中的一组对象. 在使用 find() 方法查询时,返回的并非实际文档,而是一 ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)
一.简单介绍 Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...
随机推荐
- Powershell Get-FileHash
File Hash (Get-FileHash C:\fso\myfile.txt).hash Get-FileHash C:\Users\Andris\Downloads\Contoso8_1_EN ...
- 储存应用程序的配置信息ini实现方式
1.C语言中文件操作.2.C++语言中的文件操作.3.Win32 API函数文件操作.4.MFC CFile类文件操作.5.MFC CFileDialog类的文件操作.6.注册表文件操作. 下面我来详 ...
- elasticsearch数据迁移——elasticsearch-dump使用
先安装好nodejs和nodejs的包管理工具npm.然后安装elasticsearch-dump: npm install elasticdump 下面迁移数据: 先在目的地址创建一个index来储 ...
- C++设计模式 -- 解析和实现
原文地址 http://c.chinaitlab.com/special/sjms/Index.html#a 导航目录 ※ 设计模式解析和实现之一-Factory模式 ※ 设计模式解析和实现之八-C ...
- 我的Android进阶之旅------>Android无第三方Jar包的源代报错:The current class path entry belongs to container ...的解决方法
今天使用第三方Jar包afinal.jar时候.想看一下源码,无法看 然后像加入jar相应的源代码包.也无法加入相应的源代码,报错例如以下:The current class path entry b ...
- 002-主流区块链技术特点及Hyperledger Fabric V0.6版本特点
一.主流区块链技术特点 二.HyperLedger子项目 三.Hyperledger fabric架构 V0.6逻辑架构: V0.6区块链网络 对应的0.6版本的运行时架构: 0.6版本的架构特点是: ...
- django的安装、文件解释与基本命令
1.安装 pip install django==1.9.8 2.新建一个django project django-admin startproject mysite #创建工程文件 cd mysi ...
- 《深度学习》Textbook第十章学习笔记
深度学习 第10章 序列建模:循环和递归网络 1.循环神经网络介绍 相比卷积神经网络:专门用于处理网格化的数据(如图像),可以很容易扩展到更具有很大宽度和高度的图像,以及处理大小可变的图像: 循环神经 ...
- Php DOMDocument 中的 formatOutput
Nicely formats output with indentation and extra space 是否处理 缩进和多余的空白符
- UEditor文本编辑器
Ueditor是由百度web前端研发部开发所见即所得的编辑器,具有轻量,可定制,注重用户体验等特点.Ueditor基于BSD开源协议,除了具有代码精简.加载迅速的轻量级特质 外,还采用了分层理念,使开 ...