Python 查询第三级嵌套

Python 查询第三级嵌套,python,python-3.x,mongodb,pymongo,Python,Python 3.x,Mongodb,Pymongo,我在MongoDB中有一个DB,它有3个级别,我想从最后一个级别获取值。结构如下: { "_id" : "10000", "Values" : [ { "Value1" : "Article 1", "Value2" : [ { "Value2_1" : 1, "Value2_2" : 2,

我在MongoDB中有一个DB,它有3个级别,我想从最后一个级别获取值。结构如下:

{
    "_id" : "10000",
    "Values" : [
        {
            "Value1" : "Article 1",
            "Value2" : [
                {
                    "Value2_1" : 1,
                    "Value2_2" : 2,
                }
            ]
        }
    ]
}
for row in collection.find({"_id":1, "Values.Value2.Value2_1":1})
     print(row)
我需要从标签“Value2_1”中获取值

到目前为止,我的代码如下:

{
    "_id" : "10000",
    "Values" : [
        {
            "Value1" : "Article 1",
            "Value2" : [
                {
                    "Value2_1" : 1,
                    "Value2_2" : 2,
                }
            ]
        }
    ]
}
for row in collection.find({"_id":1, "Values.Value2.Value2_1":1})
     print(row)
输出总是“无”

关于如何进行正确的查询有什么想法吗

谢谢

通过使用点
(.)
符号,您可以得到预期的结果

db.collection.find({"Values.Value2.Value2_1" : 100})
上述查询将选择
Values
数组具有
Values2
数组且
Values2
具有
Values2_1
且其值等于100的所有文档

输出:

如果您尝试使用
\u id
进行搜索,则不需要使用 第二个条件,因为根据定义
\u id
总是唯一的

下面的查询也将显示与上面相同的结果

db.collection.find({"_id" : ObjectId("5b86bd1172876096c7a9d6cf")})

如果您希望只从内部数组中获取满足内部条件的项,则可以聚合查询 PS-我的2美分-我不知道你是否需要这个,因为我无法从你的问题中弄清楚,我只是想你可能会问这个

db.coll.aggregate([{
            $unwind: '$Values'
        }, {
            $project: {
                'Values_F': {
                    $filter: {
                        input: "$Values.Value2",
                        as: "value2",
                        cond: {
                            $eq: ["$$value2.Value2_1", 1]
                        }
                    }
                }
            }
        }, {
            $project: {
                'Values_F': 1,
                'total': {
                    $size: '$Values_F'
                }
            }
        }, {
            $match: {
                total: {
                    $gte: 1
                }
            }
        }
    ])

值[0]我假设第一个值是一个列表,如果您要使用它,并且确信它只有一个元素不起作用,那么Value2也是一样的,但是谢谢。如果您按id搜索,我还将更改find语句,然后查看打印输出,例如collection。find({U id]:1})应该足够了(除非您不想按id搜索,否则请记住id是唯一的,因此没有必要向查找中添加更多内容)。然后,一旦收到响应,请尝试访问它:resp['Values'][0]['Value2'][0]['Value2_2']。。。。