在Mongodb上使用查找

在Mongodb上使用查找,mongodb,lookup,projection,Mongodb,Lookup,Projection,我有三个收藏: 故事: 章节: 图像: 我需要这个结果: { "idStory": "story-5ac97232b2ea82701e853d0b", "chapters": [ { "idChapter": "chapter-5ac97274b2ea82701e853d11" } { "idChapter": "chapter-5ac97593c9c35a7079f85f8c" "images":

我有三个收藏:

故事:

章节:

图像:

我需要这个结果:

{
    "idStory": "story-5ac97232b2ea82701e853d0b",
    "chapters": [
        { "idChapter": "chapter-5ac97274b2ea82701e853d11" }
        {
            "idChapter": "chapter-5ac97593c9c35a7079f85f8c"
            "images": [
                { "URI": "http://mypath1" },
                { "URI": "http://mypath2" }
            ]
        }
    ]
}
我尝试过以下几个阶段:

  • 查找
    故事
  • $lookup
    有关章节:

  • $unwind
    章节:

  • $lookup
    有关图像:

  • 最后,
    $project

    '$project': {
        'idStory': true,
        'chapters': {
            'idChapter': '$chapters.idChapter',
            'images': {
                'URI': '$images.URI'
            }
        }
    }
    
  • 但这不起作用:它总是在无意中的数组上重复第一个元素


    任何帮助都将不胜感激。

    'localField':“$chapters'
    甚至无效,更不用说不是正确的路径了。你会得到更多的帮助,这基本上意味着“给人们足够的数据来产生你期望的结果”。因此,如果你想显示一个包含多个章节的结果,那么请提供该数据以及与之相关的所有内容。查看一下@NeilLunn的可能重复项抱歉,我已经更正了错误,但无论如何,这绝对是我的真实数据。我不怀疑它是“真实的”,只是示例缺少数据。故事有两章,你提供“一章”。提供的章节有两个图像,您再次只提供“一个”。请包括与原始“故事”相关的其他数据。这使得这个问题“可再现”并且顾名思义是“可解决的”。
    [
        {
            "idImage": "image-5ac97593c9c35a7079f85f8c",
            "URI": "http://mypath1"
            "dateCreation": "12/12/1973"
        },
        {
            "idImage": "image-5ac9f63f8bfb1b7b5bced68e",
            "URI": "http://mypath2"
            "dateCreation": "12/12/1973"
        }
    ]
    
    {
        "idStory": "story-5ac97232b2ea82701e853d0b",
        "chapters": [
            { "idChapter": "chapter-5ac97274b2ea82701e853d11" }
            {
                "idChapter": "chapter-5ac97593c9c35a7079f85f8c"
                "images": [
                    { "URI": "http://mypath1" },
                    { "URI": "http://mypath2" }
                ]
            }
        ]
    }
    
    '$lookup': {
        'from': 'chapters',
        'localField': 'idChapter',
        'foreignField': 'idChapter',
        'as': 'chapters'
    }
    
    '$unwind': '$chapters'
    
    '$lookup': {
        'from': 'images',
        'localField': 'chapters.idImage',
        'foreignField': 'idImage',
        'as': 'images'
    }
    
    '$project': {
        'idStory': true,
        'chapters': {
            'idChapter': '$chapters.idChapter',
            'images': {
                'URI': '$images.URI'
            }
        }
    }