从3倍嵌套阵列中提取值(Mongod 4.0.23)
请帮助,我有以下文档类型:
{
_id: 1,
"_a": [
{
"_aId": {
"CC": "CA"
},
"_p": [
{
"_pId": {
"CC": "CA"
},
"s": {
"c": {
"t": [
{
sId: 1,
language: "CA",
format: "A4"
},
{
sId: 2,
language: "JP",
format: "A4"
}
]
},
"a": {
"t": [
{
sId: 4,
language: "CA",
"format": "A4"
},
{
sId: 5,
language: "EN",
"format": "A3"
}
]
},
"d": {
"t": [
{
sId: 10,
language: "CA",
"format": "A4"
}
]
}
}
}
]
}
]
}
我需要更快的解决方案来提取所有语言的子插图:“ ca”&格式:使用“ _a._p._pid.cc”的文档“ A4”:“ CA”
,因此预期的输出需要如下:
{sId:1}
{sId:4}
{sId:10}
我在“ _a._p._pid.cc”上有一个索引,我已经尝试过2x $放松,但是收集很大,需要一些时间才能放松,欢迎任何建议吗?
mongod 4.0.23
Please, help , I have following document type:
{
_id: 1,
"_a": [
{
"_aId": {
"CC": "CA"
},
"_p": [
{
"_pId": {
"CC": "CA"
},
"s": {
"c": {
"t": [
{
sId: 1,
language: "CA",
format: "A4"
},
{
sId: 2,
language: "JP",
format: "A4"
}
]
},
"a": {
"t": [
{
sId: 4,
language: "CA",
"format": "A4"
},
{
sId: 5,
language: "EN",
"format": "A3"
}
]
},
"d": {
"t": [
{
sId: 10,
language: "CA",
"format": "A4"
}
]
}
}
}
]
}
]
}
And I need faster solution to extract all subdocuments sId for language:"CA" & format:"A4" for documents with "_a._p._pid.CC":"CA"
So the expected output need to look as follow:
{sId:1}
{sId:4}
{sId:10}
I have an index on "_a._p._pId.CC" and I have tried with 2x $unwind , but collection is pretty big and it take some time to unwind , any suggestion highly is welcome?
mongod 4.0.23
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
edit :rmaved
$ first
匹配MongoDB版本3.6:一个选项是:
$降低
res
res_a._p.s
$ objecttoarry
,因为有不同的密钥名称。$降低
再次获得t
s的平坦数组。$ filter
仅保留想要的项目的数组。查看其在
Edit: rmoved
$first
to match mongodb version 3.6:One option is:
$reduce
tores
the objects under_a._p.s
$objectToArry
, since there are different key names.$reduce
again to get a flat array oft
s.$filter
the array to keep only wanted items.See how it works on the playground example