mongodb - MongoDB 只返回嵌套的对象数组
问题描述
我有这样一个文件:
{
"locale":"en",
"translations":[
{
"name":"translation1",
"value":"enValue"
},
{
"name":"translation2",
"value":"enValue"
},
{
"name":"translation3",
"value":"enValue"
}
]
},
{
"locale":"ru",
"translations":[
{
"name":"translation1",
"value":"ruValue"
},
{
"name":"translation2",
"value":"ruValue"
},
{
"name":"translation3",
"value":"ruValue"
}
]
}
]
例如,我需要返回 locale 的所有翻译en
,但我需要获得唯一的翻译数组,所以结果应该是这样的:
[
{
"name":"translation1",
"value":"enValue"
},
{
"name":"translation2",
"value":"enValue"
},
{
"name":"translation3",
"value":"enValue"
}
]
做db.test.find({locale: 'en'})
的结果是:
"_id" : "1"
"locale": en,
"translations" : [
{
"name":"translation1",
"value":"enValue"
},
{
"name":"translation2",
"value":"enValue"
},
{
"name":"translation3",
"value":"enValue"
}
]
但我不想只返回所有翻译的语言环境/ID 信息。我知道有,$elemMatch
但它仅在我想返回单个元素时才有效,例如,带有具体名称的翻译。如何在没有额外数据的情况下返回整个翻译子集???对不起,如果一个问题很愚蠢,我只是在学习 mongo
解决方案
您可以使用$unwind
和$replaceRoot
db.test.aggregate([
{ "$match": { "locale": "en" }},
{ "$unwind": "$translations" },
{ "$replaceRoot": { "newRoot": "$translations" } }
])
推荐阅读
- php - 剖析、排序和比较数组
- reactjs - 无法在 Material-ui 中访问主题的 pxToRem 函数
- excel - 用外部文件替换现有工作表
- telegram-bot - 电报机器人从其他机器人接收命令
- reactjs - 在 gatsby-remark markdown 中渲染反应组件
- ruby-on-rails - 在使用 all.each 时如何使用引导选项卡?| 在rails中起作用?
- c# - azure函数按顺序运行,需要并行
- html - CSS网格中的无意间隙
- javascript - 为什么我的函数没有按预期计算百分比?
- ios - 如何将事件从 UIView 传递到下面的 WKWebview?