0

我不知道如何在文档中找到我的答案,这就是我打扰你问的原因。
我有两个使用猫鼬的模式:

childSchmea
    name: String


parentSchema
    name: String,
    childrens: [childSchema]

我也有Child一个Parent模型。
现在在我看到的最佳实践中,如果我们想要一个特殊父母的一个特殊孩子,我们使用这个网址:

/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) {

但是,如果我们以另一种方式保存parentschildren记录,

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 回答