我有一個MongoDB中的文檔集合,其中每個文檔都有一個包含數組的子文檔。MongoDB聚合與展開空陣列
{
_id: <id>
key1: "value1",
key2: "value2",
...
versions: [
{ version: 2, key1: <othervalue2>, key2: <othervalue2>}
{ version: 1, key1: <othervalue2>, key2: <othervalue2>}
]
}
我要查詢的集合,並與所有的字段返回文檔,用符合某些參數(或空數組時沒有匹配),數組的元素一起。使用我當前的代碼,只有在數組中至少有一個匹配的元素時才能得到結果。
我使用這些參數對於聚合:
{$match: {_id: <someID>}},
{$unwind: '$versions'},
{$match: {'versions.version': {$gte: <version>}}},
{$group: {_id: '$_id', key1: {$first: '$key1'}, ..., 'versions': {$push: '$versions'}}
例如,查詢,其中arrayelement.version> = 2應返回(這可與當前代碼):
{
_id: <id>
key1: "value1",
key2: "value2",
...
versions: [
{ version: 2, key1: <othervalue2>, key2: <othervalue2>}
]
}
而查詢arrayelement.version> = 4應該返回哪裏:
{
_id: <id>
key1: "value1",
key2: "value2",
...
versions: []
}
我看過的解決方案都不是解決即使數組爲空也返回對象的問題。這甚至有可能嗎?
您的'$匹配'聚合不符合標準。因此,它在空數組的情況下不返回任何結果 – gypsyCoder
@gypsyCoder實際上'$ unwind'忽略空數組,因此這些文檔將永遠不會到達第二個'$ match'。 – zero323