我正在使用mongodb,我有一个文件,它返回一个像这样的json:
{
"_id": "5ad9a24be78f9d33888d2567",
"tag": [],
"active": 1,
"code": "_CAROT",
"name": [
{
"lang": "uk",
"translation": "carot"
},
{
"lang": "fr",
"translation": "carotte"
}
],
"season": [],
"category": [],
"createdAt": "2018-04-23T07:59:51.261Z",
"updatedAt": "2018-04-23T07:59:51.261Z",
"__v": 0
}
我想在lang上添加一个过滤器,只获得一个翻译。所以我使用聚合和$ filter来做到这一点。这就是我的工作:
db.products.aggregate(
[ {$match: {'name.lang': "fr"}},
{$project: { name: {$filter: {
input: '$name',
as: 'item',
cond: {$eq: ['$$item.lang', "fr"]}
}}
}}
])
我得到了:
{ "_id" : ObjectId("5ad9a24be78f9d33888d2567"), "name" : [ { "lang" : "fr", "translation" : "carotte" } ] }
{ "_id" : ObjectId("5add96fedf3aac3d049196ca"), "name" : [ { "lang" : "fr", "translation" : "tomate" } ] }
但是我希望得到以下结果:
{
"_id": "5ad9a24be78f9d33888d2567",
"tag": [],
"active": 1,
"code": "_CAROT",
"name": [
{
"lang": "fr",
"translation": "carotte"
}
],
"season": [],
"category": [],
"createdAt": "2018-04-23T07:59:51.261Z",
"updatedAt": "2018-04-23T07:59:51.261Z",
"__v": 0
}
基本上只有" fr"的默认结果结果在"名称"字段。
有没有办法使用mongoBD?
非常感谢
答案 0 :(得分:0)
您可以通过翻译使用聚合$unwind
来“展开”。我的意思是,对于每个文档的每个翻译值,它将创建仅具有此翻译值的新文档(在同一级别,而不是在子文档中)。然后,您必须使用$match
进行过滤才能保留“fr”翻译。
注意您必须复制每个字段名称才能将其包含在最终结果中。