MongoDB:带$ Lookup的CreateCollection

时间:2018-04-16 08:36:25

标签: mongodb mongodb-indexes

我正在尝试使用一些集合创建一个MongoDB数据库。在以下意义上,这些集合与彼此之间具有一对多的关系:

  • 一个{A}有(0 .. *){B}
  • 一个{B}有(0 .. *){C}
  • ......还有几个层次。

根据结构,我有一个非常基本的结构

  • _id ”是对象自己的ID
  • 分别为{B}和{C}的
  • 援助”和“出价”是父母的身份。
  • Aid 与{A}的 _id 不匹配的{B}。
  • 任何其他对象字段都是单独存储的。

Everything是一个自动递增的客户端整数。 我可以轻松地检查客户端是否有{A}的 _id 匹配{B}的 Aid ,但我很好奇我是否可以使用$ lookup和在服务器端也是$。为此,性能不会非常重要,因为{C}的数量可能不会超过100k。

然而,存在一个对象{D},它将在其生命周期内插入大量对象(例如,每年几十亿),所以如果$ lookup可能但性能方面不可行,我可以和{D}客户端验证一起生活。

问题:

我有{B}的以下查询失败:

db.createCollection("B", {
    validator: { $and : 
        [
            { $jsonSchema: {
                bsonType: "object",
                required: ["_id", "Aid"],
                properties: {
                    _id: {
                        bsonType: "long",
                        description: "Bid must be a number and is required!"
                    },
                    Aid: {
                        bsonType: "long",
                        description: "Aid must be a number and is required!"
                    }
                }
            } },
            { 
                Aid: { 
                    $in : [
                        { $lookup : {
                            from : "A",
                            localField : "Aid",
                            foreignField : "_id",
                            as : "A_IDs"
                        } }
                    ]
                } 
            }
        ]
    }
});

给出错误:

{
        "ok" : 0,
        "errmsg" : "cannot nest $ under $in",
        "code" : 2,
        "codeName" : "BadValue"
}

我了解上述查询失败,因为$in无法与上述$lookup一起使用。但是,我要问的是,想法是否可行,如果是,那么如何。

0 个答案:

没有答案