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的值,可以更改连接的子文档。

时间: 2024-10-05 05:51:20

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

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

MongoDB改动.删除文档的域属性实例 在站点的开发中,可能最初的设计不合理.或者后期业务的变更,会造成文档结构会有些无用的属性.须要去删除或改动.因为MongoDB 是无 Schema 的,不像关系数据库那样列属性定义在表而非记录中,MongoDB 的集合中的每一个文档能够拥有各自不同的域属性.MongoDB 中使用 db.collections.update 改动集合中若干文档的域属性,使用 $set 添加域.$unset 删除域. 删除集合中全部文档的一个域 db.posts.updat

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

MongoDB的名字源自一个形容词humongous(巨大无比的),在向上扩展和快速处理大数据量方面,它会损失一些精度,在旧金山举行的MondoDB大会上,Merriman说:“你不适宜用它来处理复杂的金融事务,如证券交易,数据的一致性可能无法得到保证”.若想了解更多关于MongoDB的信息,请看51CTO数据库频道推荐<MongoDB,无模式文档型数据库简介>. NoSQL数据库都被贴上不同用途的标签,如MongoDB和CouchDB都是面向文档的数据库,但这并不意味着它们可以象JSON(J

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

Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简介 SpringData  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的find的操作,我们上一篇介绍了基本文档的查询,我们今天介绍分页查询,分页查询是返回到匹配文档的游标,可以随意修改查询限制.跳跃.和排序顺序的功能. 我

MongoDB修改、删除文档的域属性实例

MongoDB修改.删除文档的域属性实例 在网站的开发中,可能最初的设计不合理,或者后期业务的变更,会造成文档结构会有些没用的属性,需要去删除或修改,由于MongoDB 是无 Schema 的,不像关系数据库那样列属性定义在表而非记录中,MongoDB 的集合中的每个文档可以拥有各自不同的域属性.MongoDB 中使用 db.collections.update 修改集合中若干文档的... aiyou.com/p/212603aiyou.com/p/212605aiyou.com/p/21260

微信开发者文档连接

1.微信开放平台 https://open.weixin.qq.com/cgi-bin/frame?t=resource/res_main_tmpl&lang=zh_CN&target=res/app_wx_login 2. 微信公众平台开发者文档 http://mp.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5 微信开发者文档连接

HTML&CSS基础学习笔记4-定义文档类型

定义HTML的文档类型 Web 世界中存在许多不同的文档.只有了解文档的类型,浏览器才能正确地显示文档. HTML 也有多个不同的版本,只有完全明白页面中使用的确切 HTML 版本,浏览器才能完全正确地显示出 HTML 页面.这就是 <!DOCTYPE> 的用处. <!DOCTYPE> 声明不是 HTML 标签,它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令.是一种标准通用标记语言的文档类型声明,它的目的是要告诉标准通用置标语言解析器,它应该使用什么样的文档

Sharepoint学习笔记—ECM系列—文档列表的Metedata Navigation与Key Filter功能的实现

如果一个文档列表中存放了成百上千的文档,想要快速的找到你想要的还真不是件容易的事,Sharepoint提供了Metedata Navigation与Key Filter功能可以帮助我们快速的过滤和定位我们想要查找的文档. 效果如下: 下面我们来看看如何设置实现这个功能. 1.打开你想要操作的文档库,点击此库的Library选项页及其Library Settings按钮 点击此Ribbon上的Library Setting按钮 2.在文档库的管理页面的Gegeral Settings栏,找到Met

Spring Data MongoDB 四:基本文档修改(update)(一)

Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 二:MongoDB添加.删除.修改 一.简介 Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的update的操作,可以对在存储数据时是以键-值对的集合键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档进行修改,我们今天介绍对基本文档的修改的方法.参数进

mongodb中插入一个文档

第一步:打开cmd,运行mongo.exe 第二步:引用需要加载的数据库 use 数据库名  //如果数据库名不存在,mongodb会自动建立数据库 第三步:赋值创建一个文档对象 post={"title":"hellow"} 第四步:提交插入文档 db.表名.insert(post)    //如果表名不存在,mongodb会自动建立表 第五步:查询 db.表名.find() mongodb中插入一个文档