使用pymongo,如果提示类型是自由和活动的,我只想从提示数组中检索提示主题中的值,然后将值列出到列表中

using pymongo,I want to retrieve only values in hint's subject from hints array if the hint type is free&active and then list the values into a list

如标题所示,我有这样的文档结构:

{
   "_id":ObjectId("61e53553ac31665894ebf6bc"),
   "questionID":"8",
   "questionContent":"find it",
   "questoinAnswer":"it's here",
   "questionStatus":"active",
   "questionImage":"some image",
   "hints":[
      {
         "hintID":"1",
         "hintSubject":"in you pucket",
         "hintContent":"bla bla bla",
         "hintType":"private",
         "hintStatus":"Active",
         "time":"2022-01-23 11:02:41.976391"
      },
      {
         "hintID":"2",
         "hintSubject":"red sea",
         "hintContent":"bla bla bla",
         "hintMedia":"some media",
         "hintType":"puplic",
         "hintStatus":"Active",
         "time":"2022-01-23 11:05:47.567226"
      }
   ]
}

如果 hintTypefree 并且 hintStatusactive,我只想检索 hintSubject 的值并将其放入列表

使用下面的聚合查询,其中 hintSubject 的列表存储在根字典键的 hintSubject 键中。

from pymongo import MongoClient


c = MongoClient()
db = c["db_name"]
col = db["sample_collection"]

for x in col.aggregate([
  {
    "$addFields": {
      "hintSubject": {
        "$reduce": {
          "input": "$hints",
          "initialValue": [],
          "in": {
            "$concatArrays": [
              "$$value",
              {
                "$cond": {
                  "if": {
                    "$and": [
                      {
                        "$eq": [
                          "$$this.hintType",
                          "free"
                        ]
                      },
                      {
                        "$eq": [
                          "$$this.hintStatus",
                          "Active"
                        ]
                      },
                      
                    ]
                  },
                  "then": [
                    "$$this.hintSubject"
                  ],
                  "else": [],
                  
                },
                
              },
              
            ],
            
          },
          
        },
        
      }
    }
  }
])

print(x["hintSubject"])

Mongo Playground Sample Execution