0

ドキュメントで私の答えを見つける方法がわかりませんでした。
私はマングースを使用して2つのスキーマを持っています:

childSchmea
    name: String


parentSchema
    name: String,
    childrens: [childSchema]

また、私にはChildParentモデルがあります。
今、私が見た残りのベスト プラクティスでは、 1 つの特別な親の 1 つの特別な子が必要な場合は、次のURL を使用します。

/parents/:parentId/children/:childId

現在、それぞれがマングースによってchild独自に生産されています。しかし、それは別のidの子供に特有のものですか?

子供を得るために私はこれを行う必要があります:

Parent.findById( req.params.moduleId , function(err, mod) {
    if(err) next(err);
    res.json( mod.mod_roles.id( req.params.roleId );
});

つまりchildSchema埋め込まれており、参照ではないので:

  • 私は子モデルを持っています。
  • 私の子モデルは独立しておらず、親モデルに依存しています。しかし、IDも依存していますか?もちろん、代わりfindByIdにこのコードで部分を 置き換えます。

私の質問は本当に、子供を取得するために、代わりにこのコードを使用できますか?

Child.findById( req.params.childId , function(err, child) {
     // send the child
});

これは同じ結果になりますよね?または私は間違っています、そして子のIDはその親スコープでのみ一意ですか?

どんな助けでも大歓迎です。

4

1 に答える 1

1

データスキーマについては、

var childSchema = new Schema({ name: 'string' });

var parentSchema = new Schema({
  children: [childSchema]
});

var Parent = mongoose.model('Parent', parentSchema);
var Child = mongoose.model('Child', childSchema);

親を次のコードとして保存すると

var parent = new Parent;
var child = new Child({ name: 'Aaron' });

child.save(function(err) {
    if (err)
        console.log(err);
    else
        console.log('save child successfully');
});

parent.children.push(child);

parent.save(function(err) {
    if (err)
        console.log(err);
    else
        console.log('save parent successfully');

});

その結果、コレクションのドキュメント

> db.parents.find()
{ "_id" : ObjectId("56e3bf61f3dcb32104b3ea78"), "children" : [ { "_id" : ObjectId("56e3bf61f3dcb32104b3ea79"), "name" : "Aaron" } ], "__v" : 0 }
> db.children.find()
{ "_id" : ObjectId("56e3bf61f3dcb32104b3ea79"), "name" : "Aaron", "__v" : 0 }

子ドキュメントについても同じことを知っており、コレクションに_id保存されているため、この方法で子ドキュメントを取得できますparents

Child.findById( req.params.childId , function(err, child) {

ただし、ドキュメントを別の方法で保存するparentsと、children

var parent = new Parent({ children: [{ name: 'Matt' }, { name: 'Sarah' }] });
parent.save(function(err) {
    if (err)
        console.log(err);
    else
        console.log('save parent successfully');

});

結果は

> db.parents.find()
{ "_id" : ObjectId("56e3c1173832cb24043378d6"), "children" : [ { "name" : "Matt", "_id" : ObjectId("56e3c1173832cb24043378d8") }, { "name" : "Sarah", "_id" : ObjectId("56e3c1173832cb24043378d7") } ], "__v" : 0 }
> db.children.find()

childrenコレクションに子ドキュメントが保存されていないため、子ドキュメントを見つけることができません

Child.findById( req.params.childId , function(err, child) {

のみを介して子ドキュメントにアクセスするには

Parent.findById( req.params.moduleId , function(err, mod) {
    if(err) next(err);
    res.json( mod.mod_roles.id( req.params.roleId );
});
于 2016-03-12T07:15:34.053 に答える