我在使用 pymongo 查询以下嵌套文档时遇到困难:

i am having difficulty in qerying the follwing nested document using pymongo:

如果这些是以下嵌套文档

[
  {
    "_id": 5,
    "name": "Wilburn Spiess",
    "scores": [
      {
        "score": 44.87186330181261,
        "type": "exam"
      },
      {
        "score": 25.72395114668016,
        "type": "quiz"
      },
      {
        "score": 63.42288310628662,
        "type": "homework"
      }
    ]
  },
  {
    "_id": 6,
    "name": "Jenette Flanders",
    "scores": [
      {
        "score": 37.32285459166097,
        "type": "exam"
      },
      {
        "score": 28.32634976913737,
        "type": "quiz"
      },
      {
        "score": 81.57115318686338,
        "type": "homework"
      }
    ]
  },
  {
    "_id": 7,
    "name": "Salena Olmos",
    "scores": [
      {
        "score": 90.37826509157176,
        "type": "exam"
      },
      {
        "score": 42.48780666956811,
        "type": "quiz"
      },
      {
        "score": 96.52986171633331,
        "type": "homework"
      }
    ]
  }
]

我需要访问乐谱部分 'type' = exam.can 有人帮我解决这个问题

如果您要求 python 程序来访问乐谱,您可以像这样打印出来:

collection = mongo_connection['db']['collection']
documents = collection.find({})
for doc in documents:
    for score in doc['scores']:
        if score['type'] == 'exam':
            print(f'Score: {score["score"]}')

如果您只想检索分数而忽略其余部分,我会在分数上执行 $unwind,在类型上执行 $match,然后投影您想要的字段(或不)。

db.test.aggregate([
    {
        $unwind: '$scores'
    },
    {
        $match: {
            'scores.type': 'exam'
        }
    },
    {
        $project: {
            'name': '$name',
            'score': '$scores.score'
        }
    }
])

这将输出:

{
    "_id" : 5,
    "name" : "Wilburn Spiess",
    "score" : 44.8718633018126
},
{
    "_id" : 6,
    "name" : "Jenette Flanders",
    "score" : 37.322854591661
},
{
    "_id" : 7,
    "name" : "Salena Olmos",
    "score" : 90.3782650915718
}