Mongodb mongo中的匹配和平均值保持为空

Mongodb mongo中的匹配和平均值保持为空,mongodb,Mongodb,我使用控制台执行聚合,使用$match检查嵌套字段是否存在,然后推送到group和$avg操作符。然而,匹配在同一个变量上可以正常工作,count代码也可以正常工作,但是当涉及到平均值时,我每次都返回null 我在数组中查找第一个元素,例如.0,然后在字段中查找该元素。这是非常复杂和难以调试的。有什么建议吗?Distinct显示我查看的值都是数字afaik。对于如何调试这个有什么建议吗 db.b.aggregate([ {$match: {"x.x.x.0.x": {$exists: true}

我使用控制台执行聚合,使用$match检查嵌套字段是否存在,然后推送到group和$avg操作符。然而,匹配在同一个变量上可以正常工作,count代码也可以正常工作,但是当涉及到平均值时,我每次都返回null

我在数组中查找第一个元素,例如.0,然后在字段中查找该元素。这是非常复杂和难以调试的。有什么建议吗?Distinct显示我查看的值都是数字afaik。对于如何调试这个有什么建议吗

db.b.aggregate([ {$match: {"x.x.x.0.x": {$exists: true} } }, {$group: {_id: null, myAvg: { $avg: "$x.x.x.0.x"}}}])
结果:

{ "_id" : null, "myAvg" : null }

这似乎是聚合框架的一个限制,即您可以在哪里实际使用
“array.n”
符号来访问数组的第n个元素

更准确地说,鉴于以下示例文档:

db.test.insertOne({
    "a" : [ 
        {
            "x" : 1.0
        }
    ]
})
…您可以执行以下操作来检索
“a”
数组的第一个元素与
1
匹配的所有文档:

db.test.aggregate({
    $match: {
        "a.0.x": 1
    }
})
但是,您不能运行以下操作:

db.test.aggregate({
    $project: {
        "a0x": "$a.0.x"
    }
})
可以,但它将返回一个空数组,如下所示,这确实有点令人惊讶:

{
    "_id" : ...,
    "a0x" : []
}
但是,在这种情况下,有一个特殊的操作员访问第n个元素,如下所示:

db.test.aggregate({
    $project: {
        "a0x": { $arrayElemAt: [ "$a.x", 0 ] },
    }
})
请注意,这将仅返回第n个元素-因此不再嵌套在数组中:

{
    "a0x" : 1.0
}
所以你可能想做的是:

db.b.aggregate({
    $group: {
        _id: null,
        myAvg: {
            $avg: {
                $arrayElemAt: [ "$x.x.x.x", 0 ]
           }
       }
   }
})

这似乎是聚合框架的一个限制,即您可以在哪里实际使用
“array.n”
符号来访问数组的第n个元素

更准确地说,鉴于以下示例文档:

db.test.insertOne({
    "a" : [ 
        {
            "x" : 1.0
        }
    ]
})
…您可以执行以下操作来检索
“a”
数组的第一个元素与
1
匹配的所有文档:

db.test.aggregate({
    $match: {
        "a.0.x": 1
    }
})
但是,您不能运行以下操作:

db.test.aggregate({
    $project: {
        "a0x": "$a.0.x"
    }
})
可以,但它将返回一个空数组,如下所示,这确实有点令人惊讶:

{
    "_id" : ...,
    "a0x" : []
}
但是,在这种情况下,有一个特殊的操作员访问第n个元素,如下所示:

db.test.aggregate({
    $project: {
        "a0x": { $arrayElemAt: [ "$a.x", 0 ] },
    }
})
请注意,这将仅返回第n个元素-因此不再嵌套在数组中:

{
    "a0x" : 1.0
}
所以你可能想做的是:

db.b.aggregate({
    $group: {
        _id: null,
        myAvg: {
            $avg: {
                $arrayElemAt: [ "$x.x.x.x", 0 ]
           }
       }
   }
})

你能试着隔离问题并粘贴简化数据模型吗?你能试着隔离问题并粘贴简化数据模型吗?在数组的元素中,有一个字典,我如何才能将该字段取出?你能发布一个示例文档吗?在数组的元素中,有一个字典,我怎样才能把那个字段拿出来?你能不能发一份样本文档?