Mongodb-如何通过键入第二个文档来连接两个文档,并将子文档作为数组合并到父文档



我有三个用mongodb编写的文档。它主要像一个文件夹和文件结构。我试图通过输入类别Id来搜索文件的类别。

如果有任何文件与类别id匹配,我需要将这些文件作为嵌入式数组列在父文件夹文档中作为响应。

文档文件夹

[
{
_id: "5f7763103a4af84960f86ae6",
folderName: "abcd"
},
{
_id: "5f7763103a4af84960f86ae7",
folderName: "qwerty"
},
{
_id: "5f7763103a4af84960f86ae8",
folderName: "asdfgh"
},
]

文档文件

[
{
_id: "1c7763103a4af84960f86aa5",
fileName: "test file 1",
folderId: "5f7763103a4af84960f86ae7",
categoryId: "6b7763103a4af84960f86ae2"
},
{
_id: "1c7763103a4af84960f86aa6",
fileName: "test file 2",
folderId: "5f7763103a4af84960f86ae7",
categoryId: "6b7763103a4af84960f86ae2"
},
{
_id: "1c7763103a4af84960f86aa7",
fileName: "test file 3",
folderId: "5f7763103a4af84960f86ae6",
categoryId: "6b7763103a4af84960f86ae2"
},
]

文件类别

[
{
_id: "6b7763103a4af84960f86ae1",
categoryName: "misc"
},
{
_id: "6b7763103a4af84960f86ae2",
categoryName: "images"
},
{
_id: "6b7763103a4af84960f86ae3",
categoryName: "other"
},
]

当我在文件文档中按categoryId搜索时,我需要将所有匹配的文件分组到一个用父文件夹名称分组的数组中。

我期待着以下的结果

{
folder: {
_id: "5f7763103a4af84960f86ae7",
folderName: "qwerty",
files: [
{
_id: "1c7763103a4af84960f86aa5",
fileName: "test file 1",
folderId: "5f7763103a4af84960f86ae7",
categoryId: "6b7763103a4af84960f86ae2"
},
{
_id: "1c7763103a4af84960f86aa6",
fileName: "test file 2",
folderId: "5f7763103a4af84960f86ae7",
categoryId: "6b7763103a4af84960f86ae2"
},
{
_id: "1c7763103a4af84960f86aa7",
fileName: "test file 3",
folderId: "5f7763103a4af84960f86ae6",
categoryId: "6b7763103a4af84960f86ae2"
},
]
}
}

你可以这样做:

db.folders.aggregate([
{
"$lookup": {
"from": "files",
"localField": "_id",
"foreignField": "folderId",
"as": "files"
}
}
])

以下是工作示例:https://mongoplayground.net/p/HaYRsK0ulXN

最新更新