Python 查询第三级嵌套
我在MongoDB中有一个DB,它有3个级别,我想从最后一个级别获取值。结构如下: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,
{
"_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']。。。。