$ lookup聚合使用变量

时间:2017-06-04 22:32:44

标签: mongodb lookup

亲爱的,我是MongoDB的新手,我无法解决这个问题。

我认为很简单,但是,超出我=( 如果有人可以帮助我,我真的非常感谢你:)。

假设我需要对一个我仍然不知道名字的集合进行$ lookup。我收藏了很多!这个例子可以给出一个ideia:

**Collection Books** {id, name, year, editor, *source*};
**Collection Category** {category_name, collection_name, *source*};

**Collection Cat_Romance** {*source*, main_guy, main_girl, theme, ...};
**Collection Cat_Thriller** {*source*, enigma, thriller, ...};
**Collection Cat_Adventure**;
**Collection Cat_Magic**, ....;

如您所见, category 集合中的每个文档都会显示不同的信息。

问题是,我正在创建一个收到类别名称的系统,我需要回来,这本书的主要信息,以及他分别收集的所有信息。像下面的代码:

db.books.aggregate([
   { $lookup : {
        from : "category",
        localField : "source",
        foreignField : "source",
        as : "category" }},
   { $unwind : "$category"},
   { $match : { 'category.category_name' : */romance/*}}
   { $project: { cat : '$category.collection_name'}}, 
   { $lookup : {
        from : "$$cat",
        localField : "source",
        foreignField : "source",
        as : "category_infos" }},
])

在这个例子中,我想要那些属于浪漫类的书 如上面查询中所述,我使用字段 source 来聚合集合,并将我想要的集合名称存储到变量 cat 中。这个变量我想用到第二个$ lookup来聚合正确的集合。

假设我收到条目:浪漫,代码应返回如下内容:

{
    "_id" : ObjectID("XXXXX"),
    "name": "XXXX",
    "year": "XXXX",
    "editor": "XXXX",
    "category_infos" : {
           *source*: "YYY", 
           main_guy: "YYY",
           main_girl: "YYY",
           theme: "YYY",
           ....
    }
}

嗯,我认为这个问题已得到解释。如果有人能给我一个亮点,我真的很感激。我与之斗争已经过了几个小时=( 如果代码不是enoght或格式错误,请告诉我。

我感谢先进的任何人看一看并尝试帮助=)

0 个答案:

没有答案