0

私は文書を持っています:

"_id": ObjectId("THE DOCUMENT ID"),
   "GROUP NAME": "First Floor",
   "years": {
     "0": {
       "_id": "YEAR ID",
       "year_classes": {
         "0": {
           "class_name": "CLASS A",
           "_id": "CLASS ID",
           "participants": {
             "0": "PARTICIPANT ID" 
          } 
        },
         "1": {
           "class_name": "CLASS B",
           "_id": "CLASS ID",
           "participants": {
             "0": "PARTICIPANT ID" 
          } 
        },
      },
       "year_name": "YEAR 1" 
    },
     "1": {
       "_id": "YEAR ID",
       "year_classes": {
         "0": {
           "_id": "CLASS ID",
           "class_name": "CLASS C",
           "participants": [

          ] 
        } 
      },
       "year_name": "YEAR 2" 
    },
  } 

年に別のクラスを追加する必要があります。コードには、クラスが追加される $YEAR_ID 変数 (文字列) による年 ID があります。

そのため、$NEW_CLASS_NAME (文字列変数) で指定されたクラス名がその年に既に使用されているかどうかを確認する必要があります。

mongo の $and 演算子を見ましたが、うまく動作させることができませんでした。それが SQL である場合、次のようになります。 WHERE year_id='$YEAR_ID' AND class_name='$NEW_CLASS_NAME'

これはMongoDBでどのように行うことができますか?


アップデート:

クエリ:

{ "years.year_classes.class_name": $NEW_CLASS_NAME, "years._id": $YEAR_ID }

同じ配列ではなく、ドキュメントを検索しています (したがって、常に TRUE が返されます)。

同じ配列でこれらの 2 つの値を検索するようにクエリを指示する方法はありますか?その名前のクラスは、その特定の ID を持つ年の配列にあるクラスの配列にありますか?

4

1 に答える 1

0

埋め込みオブジェクト内の 2 つの条件を比較する場合は、$elemMatch を使用する必要があります。一般的な説明はこちらをご覧ください。

クエリ構造は次のようになります。

db.coll.find({"years":{$elemMatch:{"year_classes.class_name":$NEW_CLASS_NAME,"_id":$YEAR_ID }}})

于 2012-07-16T02:11:33.453 に答える