mongodbノート(一)スライス&&ドキュメント接続

4031 ワード

バージョン:mongodb 3.4 ;
スライス:
作業順序:router=>config=>shards
一、configを構成する:
3.4のconfigはreplSetでなければなりません.次に2つの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);
公式の提案は3つですが、ここには2つしかありません.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'})
 
ドキュメントの接続:
ドキュメント参照
公式に使用されている方法は、1つのdocumentのfieldを別のdocumentの_id.
ツリー構造:
サブ定義parent.親はchildrenを定義します.子の親のfiledを入れます.インデックスを作成できます.より遠くancestorを定義することができます.
ツリーパス:
documentを定義するfiledの1つはstring型',path,path 1,path 2'である.ツリー構造に基づいて、パスを書き込みます.
ツリーのパス:
各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.
mongose populationを紹介します.
2つのドキュメントを接続し、親ドキュメント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の値を変更することで、接続されたサブドキュメントを変更できます.