2017-09-22 7 views
0

から要素を比較するために、MongoDBの$を使用する:どこのは、私が2つの以下のMongoDBのドキュメントを持っていると仮定しましょうアレイ

{ 
"_id" : ObjectId(a59b0e19aff8a2ed2128bef97"), 
"name" : "John", 
"matches" : [ 
    { 
     "name" : "Bob", 
     "count" : 10 
    }, 
    { 
     "name" : "John", 
     "count" : 20 
    }, 
    { 
     "name" : "Alice", 
     "count" : 30 
    } 
] 
} 


{ 
"_id" : ObjectId(b59b0e19aff8a2ed2128bef97"), 
"name" : "Mike", 
"matches" : [ 
    { 
     "name" : "Bob", 
     "count" : 10 
    }, 
    { 
     "name" : "John", 
     "count" : 20 
    }, 
    { 
     "name" : "Alice", 
     "count" : 30 
    } 
] 
} 

私は「matches.name」と「名前」を比較しますMongoDBのクエリを作成する必要があります。

私の例では、 "マッチ"配列に "John"があるため、最初のドキュメントのみがマッチします。 Mikeが配列にないため、2番目の文書は一致しません。

私は{$where : "this.matches.name == this.name"}を試しましたが、これは動作しません。

アイデア?

+0

をあなたはMongoのクエリやjsのコードが行いますしたいですか?すでに文書をある変数にロードしていると、jsコードがより適切になるからです。 – Prasanna

+0

いいえ、mongoクエリが必要です。 JSソリューションは、文書がすでにロードされている場合はこの場合単純です。 –

答えて

0

私は、これはあなたがきちんと

{ 
    "_id" : ObjectId("59c54e6f505e2f07180e60f7"), 
    "name" : "John", 
    "matches" : [ 
     { 
      "name" : "Bob", 
      "count" : 10.0 
     }, 
     { 
      "name" : "John", 
      "count" : 20.0 
     }, 
     { 
      "name" : "Alice", 
      "count" : 30.0 
     } 
    ] 
} 
+0

@Skamiありがとうございます。このソリューションは非常にうまく機能します! –

-1

あなたはこの機能クエリを試したのを返す任意のマッチ$name

db.collection.aggregate([{ 
      "$redact": { 
       "$cond": [{ 
         "$anyElementTrue": [{ 
           "$map": { 
            "input": "$matches", 
            "as": "matches", 
            "in": { 
             "$eq": ["$$matches.name", "$name"] 
            } 
           } 
          } 
         ] 
        }, 
        "$$KEEP", 
        "$$PRUNE" 
       ] 
      } 
     } 
     ]) 

かどうかを確認するためにmatches.$.nameを見aggregateクエリ、探しているものかもしれ信じますアプローチ?

db.myCollection.find({ $where: function() { return (this.matches.name == this.name) } }); 

これはあなたのシナリオのために働いている場合は、ここでコメントしてください:)

+0

'{$ where:" this.matches.name == this.name "}'と同じですが、このクエリはドキュメントを返しません –

関連する問題