我有两种型号的
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
}
}
])