2017-02-19 9 views
0

"Applied Mathematics"の結果のみを配列として取得するには、このコレクションで$ filterを適用します。私はこのような配列の形で入力を提供しています。["Applied Mathematics"]を以下のコレクションに提供します。この目的のために

{ 
    "_id" : ObjectId("58a95d81eead32e82932b535"), 
    "univisorEducation" : [ 
     { 
      "educationLevel" : "BACHELOR", 
      "courseType" : "UNDERGRADUATE", 
      "year" : 2016, 
      "college" : ObjectId("58a936add48f2b502858a70d"), 
      "_id" : ObjectId("58a95eb2eead32e82932b541"), 
      "course" : [ 
       "Anthropology", 
       "Biomedical Engineering", 
       "Applied Mathematics" 
      ] 
     } 
    ] 
} 
{ 
    "_id" : ObjectId("58a9643deead32e82932b54b"), 
    "univisorEducation" : [ 
     { 
      "educationLevel" : "DOCTORATE", 
      "courseType" : "GRADUATE", 
      "year" : 2020, 
      "college" : ObjectId("58a936afd48f2b502858b5e2"), 
      "_id" : ObjectId("58a96495eead32e82932b550"), 
      "course" : [ 
       "Applied Mathematics", 
       "Applied Physics" 
      ] 
     }, 
     { 
      "educationLevel" : "MASTER", 
      "courseType" : "GRADUATE", 
      "year" : 2020, 
      "college" : ObjectId("58a936afd48f2b502858b9f7"), 
      "_id" : ObjectId("58a96495eead32e82932b54f"), 
      "course" : [ 
       "Applied Mathematics" 
      ] 
     } 
    ] 
} 

私は以下、$プロジェクトで$フィルターを使用しています私の$フィルタコードは、問題は私だけ

{ "_id" : ObjectId("58a95d81eead32e82932b535"), "univisorEducation" : [ ] } 
{ 
    "_id" : ObjectId("58a9643deead32e82932b54b"), 
    "univisorEducation" : [ 
     { 
      "educationLevel" : "MASTER", 
      "courseType" : "GRADUATE", 
      "year" : 2020, 
      "college" : ObjectId("58a936afd48f2b502858b9f7"), 
      "_id" : ObjectId("58a96495eead32e82932b54f"), 
      "course" : [ 
       "Applied Mathematics" 
      ] 
     } 
    ] 
} 

この結果を取得していますということです

$filter: { 
      input: "$univisorEducation", 
      as: "univisorEducation", 
      cond: { 
       $setIsSubset: ["$$univisorEducation.course", courses] 
      } 
     } 

です"_id"を伴うコレクション:ObjectId( "58a95d81eead32e82932b535")は、応用数学の結果を持つ必要があります。

+0

あなたは何をしようとしていますか?サブセット操作は対称ではありません。期待される成果は? – Veeram

+0

私は何をしたいですか配列の入力値に基づいて配列のフィールドデータをフィルタリングする –

+0

あなたの質問は何ですか?あなたは最初のクエリを使用して期待される結果を得ています。なぜ2番目のクエリが全く異なるクエリでも同じ結果を返すことを期待していますか? – Veeram

答えて

1

$filter集計を以下に変更してください。

coursesunivisorEducation.courseに比較し、一致する場合はunivisorEducation.course、そうでない場合はfalseを返します。

$filter: { 
    input: "$univisorEducation", 
    as: "univisorEducation", 
    cond: { 
     $ne:[{$setIntersection: [courses, "$$univisorEducation.course" ]}, []] 
    } 
} 
+0

私はそれ以前にしました。私は希望の結果を得ましたが、このような入力コースの配列があれば["Applied Mathematics"、 "Chemistry and Physics"]。私は結果が得られませんでした。希望の結果を達成する方法はありますか? –

+0

意味があります。更新された答え。確認してください。 – Veeram

関連する問題