2017-02-07 20 views
0

この問題があります。私はMongoDBの中でこのデータベースを持っている:"find"でmongoDBを照会する方法

{ 
"_id" : ObjectId("585fe33d3c63b4a81e00002b"), 
"class" : [ 
    { 
     "name" : "class 1", 
     "people" : [ 
      { 
       "id" : "58596", 
       "name" : "mark", 
      }, 
      { 
       "id" : "45643", 
       "name" : "Susan", 
      }, 
      { 
       "id" : "85952", 
       "name" : "Loris", 
      } 
    },  
    { 
     "name" : "class 2", 
     "people" : [ 
      { 
       "id" : "58456", 
       "name" : "Sissi", 
      }, 
      { 
       "id" : "45643", 
       "name" : "Susan", 
      } 
     ]  
    } 
] 
} 

私はPHPを使用して、私は内部の特定の名前を持つクラスの名前を知っているし、配列に保存したいと思います。

例えば、私がスーザンを選択した場合、["class 1" , ["class 2"]という配列が必要です。

私はfindOneを使用しましたが、今回はfindを使用する必要があります。

答えて

0

MongoDB aggregation frameworkを使用できます。

ここには、希望する形式の日付を示すクエリがあります。しかし、私はこれを処理するためのいくつかのより良い効率的な方法があると信じていますが、これは私が思いついたものです。

db.collection.aggregate([ 
    {"$unwind":"$class"}, 
    {"$unwind":"$class.people"}, 
    {"$match": { 
     "class.people.name":"Susan" 
     } 
    }, 
    {"$group":{ 
     "_id":"$class.people.name", 
     "classes":{"$push":"$class.name"} 
    } 
    } 
]) 

結果: -

{ "_id" : "Susan", "classes" : [ "class 1", "class 2" ] } 

$unwind前に、パイプライン内の不要な結果を回避するために、最初の$unwind操作の前に$matchしてみてください。

パフォーマンスを改善するためにAggregation Pipeline Optimizationを参照してください。

+0

ありがとうございます。できます。どうもありがとうございます 。あなたは私をたくさん助けました。ありがとうございました – AlleBo

関連する問題