簡體   English   中英

如何使用python選擇僅mongodb的匹配子文檔

[英]How to select only matched sub-document of mongodb using python

Document in Mongo ->

            {
             emp_id : 11
             proj_info : 
                    [{
                     proj_id : 91
                     proj_name : 'abc'
                     proj_team : 
                            [{
                               name : 'Ravi'
                               member_emp_id : '55'
                               designation : 'manager'
                            }
                            {
                               name : 'Ram'
                               member_emp_id : '66'
                               designation : 'consultant'
                            }]
                    }   
                    {
                     proj_id : 92
                     proj_name : 'pqr'
                     proj_team : 
                            [{
                               name : 'Sham'
                               member_emp_id : '15'
                               designation : 'manager'
                            }]
                    }   
                    {
                     proj_id : 93
                     proj_name : 'xyz'
                     proj_team : 
                            [{
                               name : 'Karan'
                               member_emp_id : '25'
                               designation : 'manager'
                            }]
                    }   
            }]
}

這是我用Python編寫的mongoClient查詢-

     collectionObject.aggregate([{'$match':"proj_info.proj_team.member_emp_id":'55',"proj_info.proj_id":'91','emp_id':'11'}},
{'$unwind':"$proj_info"},
{'$match': {"proj_info.proj_team.member_emp_id":'55'}},
{'$unwind': "$proj_info.proj_team"},
{"$group": {"_id": "$_id","key": {"$first": "$key"},"proj_team": {"$push": "proj_info.proj_team"}}}]):

示例我希望將輸出僅作為子文檔,其輸入是emp_id:11proj_id:91proj_id:91 member_emp_id:55

我想要預期的輸出=>

proj_team : {
               name : 'Ravi'
               member_emp_id : '55'
               designation : 'manager'
            }

請幫我解決。 ===================== -------- ================

歡迎使用Stackoverflow,您可以使用$ {project}方法將其縮小到子文檔的范圍,然后可以在其中使用${match} ,如下所示:

collectionObject.aggregate([
{'$match':"emp_id":'11'}},
{'$project': {"proj_info": 1}},
{'$match':"proj_id":'91'}},
{'$project': {"proj_team": 1}},
{'$match': {"member_emp_id":'55'}}])

謝謝,但是我仍然必須進行一些更改,因為它沒有提供預期的輸出,所以我進行了這些更改=>

collectionObject.aggregate([
{'$match':{'emp_id': '11', "proj_info.pro_id": '11'   }},

{'$unwind': "$proj_info"},

{'$match': {"proj_info.proj_team.member_emp_id": '55' }},

{'$unwind': "$proj_info.proj_team"},

{'$project': {"proj_info.proj_team": 1,"_id" : 0}}

]):

這對我有用。

謝謝您的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM