如何为多个集合创建mongodb聚合查询



我有两种型号的

export const StorySchema = new Schema({
type: { type: String, required: true },
texts: { type: Array, require: true },
});

export const TextSchema = new Schema({
textKey: { type: String, required: true },
text: { type: String, required: true },
});

我的收藏

// stories
[
{
"type": "export",
"texts": ["export", "download"]
},
...
]
// Text
[
{
"textKey": "export",
"text": "Export ....."
},
{
"textKey": "download",
"text": "Download ....."
},
...
]

我想将集合text的字段textKey与集合story的数组texts组合,并将集合text的字段text写入结果查询中。我必须得到一个对象数组

[
{
"type": "export",
"texts": ["Export .....", "Download ....."]
},
...
]

我试图创建一个聚合的多个集合

public async getStoriesList(): Promise<Story[]> {
return await this.storyModel.aggregate([{
$lookup: {
from: 'texts',
localField: 'texts',
foreignField: 'textKey',
as: 'texts',
},
}]);
}

但我得到了一个空数组。我哪里出错了?如何创建聚合?

你不能在数组上lookup,你可以使用这个聚合来实现你想要的,但如果你有大的集合,它可能会很慢:

db.stories.aggregate([
{
"$unwind": "$texts"
},
{
"$lookup": {
"from": "texts",
"localField": "texts",
"foreignField": "textKey",
"as": "data"
}
},
{
"$unwind": "$data"
},
{
"$group": {
"_id": "type",
"texts": {
"$push": "$data.text"
}
}
},
{
"$project": {
"type": "$_id",
"_id": 0,
"texts": 1
}
}
])

相关内容

  • 没有找到相关文章

最新更新