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サブドキュメントのプロパティを使用します.
update:
残念ながらdoc.を通過できませんでした.children.name='';doc.save();この方法でchildren document内のプロパティを変更します.
動的接続:
refの値は直接変更できません.したがってkindの値を変更することで、接続されたサブドキュメントを変更できます.
スライス:
作業順序: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の値を変更することで、接続されたサブドキュメントを変更できます.