mongodb - 文件夹树层次结构

时间:2014-05-29 12:58:13

标签: node.js mongodb hierarchy

结构中的每个文件夹都有一个祖先id列表。 当我将文件夹移动到新父级时,我必须使用新祖先更新所有子级:

// root folder
{
    id: 1,
    name: "folder 1",
    ancestorIds: []
}

    // child of folder 1
    {
        id: 2
        name: "folder 2",
        ancestorIds: [1]
    }

        // child of folder 2
        {
            id: 3
            name: "folder 3",
            ancestorIds: [1, 2]
        }

// other root folder
{
    id: 4,
    name: "folder 4",
    ancestorIds: []
}

现在我想将“文件夹2”(id 2)移动到另一个根文件夹(文件夹4,id 4)。 结构应如下所示:

// root folder
{
    id: 1,
    name: "folder 1",
    ancestorIds: []
}

// other root folder
{
    id: 4,
    name: "folder 4",
    ancestorIds: []
}

    // now child of folder 4
    {
        id: 2
        name: "folder 2",
        ancestorIds: [4]
    }

        // still child of folder 2, but ancestor changed!
        {
            id: 3
            name: "folder 3",
            ancestorIds: [4, 2]
        }

要正确修改子祖先列表(id 3),我必须删除旧祖先(id 1)并添加新祖先(id 4)。 在nodejs中,它将如下所示:

collection.update({ "ancestorIds": 2 }, { "$pullAll": { "ancestorIds": [1] } }, { multi: true }, function (err) {
    if (err) throw err;

    collection.update({ "ancestorIds": 2 }, { "$pushAll": { "ancestorIds": [4] } }, { multi: true }, function (err) {
        if (err) {
            // critical error here

            throw err;
        }               
    });
});

如果拉取请求成功,但推送失败:

ancestorIds现在没有根文件夹,列表无效!     [2]而不是[4,2]或[1,2]

我可以在单个数据库请求中修改anchestor ID吗? 或者是否存在根本不同的解决方案?

0 个答案:

没有答案