带项目和filter的mongoose查询

我有查询:

Model.aggregate([{ $lookup: { from: 'translations', localField: '_id', foreignField: 'item_id', as: 'translation' }, }, { $project: { "label": "$label", "items": "$items", "translation": { "$filter": { "input": "$translation", "as": "page", "cond": { "$eq": ["$$page.lang_key", lang] } } } } }]) 

结果:

 [ { _id: 58b2ca5b9ac42bac7aaed48a, label: 'Main', items: [ [Object] ], translation: [ [Object] ] } ] 

如何使字段translation不是一个数组? 因为我总是只收到一个元素在数组…

由于您只收到数组中的一个元素,因此您可以使用$unwind$arrayElemAt来压扁数组并生成一个子文档。 对于后者,像下面这样的东西应该适合你:

 Model.aggregate([ { "$lookup": { "from": "translations", "localField": "_id", "foreignField": "item_id", "as": "translation" } }, { "$project": { "label": 1, "items": 1, "translation": { "$arrayElemAt": [ { "$filter": { "input": "$translation", "as": "page", "cond": { "$eq": ["$$page.lang_key", lang] } } }, 0 ] } } } ])