问题查询和显示嵌入文档的mongodb聚合结果

问题查询和显示嵌入文档的mongodb聚合结果,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我试图显示mongodb嵌入文档的聚合结果。我想根据某些查询参数查询嵌入的文档,并仅显示子文档的分页结果。但是我在显示数据时遇到了一些问题。收集的当前格式如下: { "_id" : ObjectId("5944b9d81b7bfc4d925d9e53"), "deleted" : false, "album_name" : "pokhara trip", "album_description" : "album description of my-album", "active" :

我试图显示mongodb嵌入文档的聚合结果。我想根据某些查询参数查询嵌入的文档,并仅显示子文档的分页结果。但是我在显示数据时遇到了一些问题。收集的当前格式如下:

{ 
"_id" : ObjectId("5944b9d81b7bfc4d925d9e53"), 
"deleted" : false, 
"album_name" : "pokhara trip", 
"album_description" : "album description of my-album", 
"active" : "true", 
"url_slog" : "pokhara-trip", 
"images" : [
    {
        "_id" : ObjectId("5944bd111b7bfc4d925d9e55"), 
        "deleted" : true, 
        "image_title" : "test image 1", 
        "image_alt_text" : "test image alt text", 
        "image_description" : "test image detail", 
        "active" : "true"
    }, 
    {
        "_id" : ObjectId("5944bd591b7bfc4d925d9e56"), 
        "deleted" : true, 
        "image_title" : "test image 1", 
        "image_alt_text" : "test image alt text", 
        "image_description" : "test image detail", 
        "active" : "true"
    }
]
}

我正在使用聚合框架查询上述集合,并仅显示图像子文档。我只想显示那些未标记为已删除的文档

我已经做了以下工作来查询和显示结果。 但是我在分页和查询子文档方面有问题

下面是我的代码

const queryOpts = {};
    const queryOptsImage = {};

    queryOpts._id = ObjectId(req.params.albumId);
    queryOpts.deleted = false;
    queryOptsImage["images"] = {
        'deleted': false
    };

    console.log(queryOpts);
    console.log('--------------------------------------');

    const galleryImages = await req.db.collection('ImageGalleryAlbum').aggregate(
        {
            $unwind:"$images"
        },
        {
            $match: queryOpts
        },
        {
            $project: projectionImageFields
        },
        {
            $group: {
                _id: null,
                images: { $push: "$images" }
            }
        },
        {
            $unwind:"$images.images"
        },
        // {
        //     $limit:pagerOpts.perPage
        // },
        // {
        //     $skip:pagerOpts.perPage * (pagerOpts.page-1)
        // },

    ).toArray();

    // const imagesArr =
    console.log(galleryImages);
我得到的结果如下:

    [
  {
    "images": [
      {
        "_id": "5944bd111b7bfc4d925d9e55",
        "image_title": "test image 1",
        "image_alt_text": "test image alt text",
        "image_description": "test image detail",
        "active": "true"
      },
      {
        "_id": "5944bd591b7bfc4d925d9e56",
        "image_title": "test image 1",
        "image_alt_text": "test image alt text",
        "image_description": "test image detail",
        "active": "true"
      }
    ]
    }
]
我想要的是,我希望这些图像文档位于顶级数组中。
没有{and images数组。

queryOpts={“\u id”:ObjectId(req.params.albumId),“images.deleted”:false}
。请参阅核心文档。谢谢@Neil queryOpts,正如您建议的那样可以工作,但我正在以上述格式获得结果。我如何更改它,以便我以单级对象数组的形式获得所有图像?不要。学着按原样生活。事实上,你真的应该使用并接受这是一个数组。你知道吗将其嵌入到文档中,这样您就不应该期望只得到这些结果。如果您总是只想要嵌入的项,那么将它们放在单独的集合中。这样使用聚合管道来破坏文档是一个需要避免的性能问题。至少,
$filter
可以应用“或多或少”性能与常规的
.find()
相同。好的,谢谢。我将尝试使用$filter查看
$filter
的用法示例。