2016-11-22 7 views
1

これは初めてNoSQL形式のデータベースを扱うのですが、私はドキュメント指向データベースの「関係」についてちょっと混乱しています。私はループバック& AngularJSを使用しています。ループバック関係

pagehas manypageのモデルはchildren(つまり、メニュー項目とサブメニュー)です。

pageモデルは次のとおりです。

"properties": { 
"name": { 
    "type": "string", 
    "required": true 
}, 
"slug": { 
    "type": "string" 
}, 
"link": { 
    "type": "string" 
}, 
"createdAt": { 
    "type": "date", 
    "required": true 
}, 
"children": { 
    "type": [ 
    "object" 
    ] 
} 
}, 

私の混乱は、私はその後、getparentページをループバックAPIをexplore、そしていつでも、私は見ていないということです

"relations": { 
"children": { 
    "type": "hasMany", 
    "model": "page", 
    "foreignKey": "parentId" 
} 
}, 

childrenプロパティが設定されています。しかし、 getを実行して親の子供たち(親の idを使って)がうまくいくとわかりました - 私は parentIdが親であることがわかります。

NoSQL /ドキュメント指向のデータベースを扱う際にこれが正常であるかどうか、あるいは私は何か間違っていますか?

ありがとうございます!

マングースで

答えて

0

ページの「子どもたちは」あなたは特別使用してそれを求める必要がある人口取得したい:ループバックのページに探し

Pages.find({}) 
    .populate('children') 
    .exec(function(err, pages){ 
    //.. 
    }) 

http://loopback.io/doc/en/lb2/Querying-related-models.htmlが)と呼ばれる類似した何かがあるあなたは、「含めます」試してみる必要があります:

Page.find({include:'children'}, function() { 
    //... 
}); 

それがうまくいけば教えてください!

1

私はあなたが関係の他の方向性を失っている可能性があると信じています。

子にbelongsTo relationを付けて、それが親に属することを指定することができます。

これで、エクスプローラで双方向の方法を見ることができるはずです。

また、foreingKey parentIdは、親ではなく子に設定する必要があります。私。外部relationsの定義にforeignKeyを残し、代わりにchildrenリレーション定義で使用してください。

だから、一方では、モデルでは、リレーションフィールド内になります。

"children": { 
    "type": "hasMany", 
    "model": "page", 
    "foreignKey": "" 
}, 

"parent": { 
    "type": "belongsTo", 
    "model": "page", 
    "foreignKey": "parentId" 
}, 

プラスあなたが持っている任意の他の関係を。

私はこれをテストしていますが、私はリレーションに対して2つの異なるモデルを1つではなく使っています。

I.e.私は時々、その関係は、並列クエリに来たときにクエリが乱雑になっているループバック

ModelA hasMany ModelB、代わりに

ModelA hasMany ModelA

+0

これを行うには、新しいモデル( 'childPage'など)を作成する必要がありますか?基本的に、親としての 'page'と子としての' page'は全く同じモデルです。 – floatyourboat

+0

同じモデルを使用するのがうまくいくかどうか分かりませんが、それを試してみる必要があります。しかし、そうでなければ、本当に新しいモデルを作る必要があると思います。しかし、私は別のモデルを作ることにも他の利点があると思います。彼らは今でも同じですが、将来変化すればどうなるでしょうか?また、フィルタなどの方が簡単ですか? – Acapulco

3

ModelA belongsTo ModelAModelB belongsTo ModelA

を使用しています。

これは単なるループバックのクエリの問題だと思います。

私はこれが親ページのようなオブジェクトであることを認識したので、複数の子ページオブジェクトを持つことができます。

次のクエリ文を使用して、関連する親ページと子ページを取得できます。

 

    app.models.Page.find({ 
      where: { 
       parentId : 'yourPageId' 
      }, 
      include: { 
       relation: 'Children' 
      } 

      }, function (err, pages) { 
      if (err) { 
       cb(err); 
      } else { 
       console.log("you will get related children pages alone with parent page") 
       cb(null, pages); 
      } 
    }); 

これはうまくいきます!!

関連する問題