问题查询和显示嵌入文档的mongodb聚合结果
我试图显示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" :
{
"_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
的用法示例。