【问题标题】:child id, unique in the scope of the parentSchema, or in all of the childrens?孩子 id,在 parentSchema 范围内唯一,还是在所有孩子中?
【发布时间】:2016-03-12 15:15:34
【问题描述】:

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

childSchmea
    name: String


parentSchema
    name: String,
    childrens: [childSchema]

我还有一个Child 和一个Parent 模型。
现在在我看到的其他最佳实践中,如果我们想要 一个特殊父母的 一个特殊子,我们使用这个 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 仅在其父范围内是唯一的?

非常感谢任何帮助。

【问题讨论】:

    标签: mongoose mongoose-schema


    【解决方案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);
    

    如果我们把parent保存为如下代码

    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 );
    });
    

    【讨论】:

      猜你喜欢
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      相关资源
      最近更新 更多