MongoDB查询树结构以返回其父项具有特定属性的子项

时间:2013-07-08 04:43:12

标签: mongodb

我是Mongo的新手并希望得到一些帮助!

我有一个Parent References树结构,如下所示:

Object {
    _id: <some id>
    parent: <an _id or null if topmost>
    allowed : [userIds]
}

我想要一个查询,它返回最顶层父对象在允许列表中具有此用户ID的所有对象。最顶层的父项是父项为null的父项,最顶层的父项也应作为查询的一部分返回。

通常情况下,一棵树有1-10级但可能更多。我应该担心表现吗?

1 个答案:

答案 0 :(得分:1)

我已经弄明白了,因为无论谁需要这个。你必须基本上做两个查询:

    // 1 - GET THE ANCESTORS
    var allowedAncestorIds = [];
    Objects.find({
        parent: null,
        allowed: this.userId
    }).forEach(function (ancestor) {
        // 2 - STORE THEIR IDs
        allowedAncestorIds.push(ancestor._id);
    });

    return Objects.find({
        $or: [
            // 3 - USE THE ALLOWED ANCESTOR IDs IN THE QUERY TO GET ALL THE OBJECTS
            {parent: {$in: allowedAncestorIds}},
            {allowed: this.userId}
        ]
    });