考虑数组
$lettersArray = [A,C,E,G]
我的MongoDB集合具有以下结构。
{
Collection : {
letters:{
A:{...},
B:{...},
...
Z:{...}
}
}
}
请考虑,Letter Sub文档是较大集合的一部分。因此,我正在使用聚合。 现在,我已经尝试投影-
['$Collection.letters' => ['$elemMatch' => ['$in' => $lettersArray]]
也尝试过
['Letters' => ['$in' => [$lettersArray,'$Collection.letters']]
但这没用。
最后,我希望得到如下结果:
[
Collection => [
letters => [
A => [...],
C => [...],
E => [...],
G => [...]
]
]
]
有什么办法吗?
答案 0 :(得分:0)
在PHP中,您可以将array_combine与array_fill一起使用以创建空数组。
$lettersArray = ['A','C','E','G'];
$letters = array_combine($lettersArray, array_fill(0,count($lettersArray), []));
Array_fill创建一个从索引0到$ lettersArray中内容为[]
的项目计数的数组
输出:
array(4) {
["A"]=>
array(0) {
}
["C"]=>
array(0) {
}
["E"]=>
array(0) {
}
["G"]=>
array(0) {
}
}
答案 1 :(得分:0)
我认为您在尝试访问文档信息时出错。
如果查看您的MongoDB文档,您会发现它实际上不是数组,因此不应使用UnknownWebservice
来投影这些字段,而应使用简单的投影。对于您的情况,您应该以这种方式进行投影:
$elemMatch
顺便说一句,您不需要使用聚合框架来计算这样的投影。您可以只使用[
'$project' => [
'Collection.letters.A' => 1,
'Collection.letters.C' => 1,
'Collection.letters.E' => 1,
'Collection.letters.G' => 1
]
]
,并在选项中使用投影,这是函数的第二个参数:
find()
干杯
查尔斯