2016-12-03 19 views
0

reviews配列内のオブジェクトを取得しようとしているのは、私が渡しているfb_idの配列と一致しています。私はそれらを働かせるようには思わない。これは私が "マングースとだけfb_id持つ配列内のオブジェクトの結果たいの年代をfb_idの配列を送信しますDBオブジェクト内の配列一致要素からオブジェクトのみを取得する

{ 
    "_id": { 
     "$oid": "5841d18187dcc74805887a6a" 
    }, 
    "product_id": "583ae172231f5ec01db5727e", 
    "category": "Smartphones", 
    "reviews": [ 
     { 
      "fb_id": "111", 
      "name": "name1", 
      "user_img": "imgurl1", 
      "title": "asdakj", 
      "description": "jnkjnkj", 
      "rating": 5, 
      "_id": { 
       "$oid": "5841d18187dcc74805887a6b" 
      } 
     }, 
     { 
      "fb_id": "222", 
      "name": "name2", 
      "user_img": "imgurl2", 
      "title": "dadad", 
      "description": "asdasdad", 
      "rating": 3, 
      "_id": { 
       "$oid": "5841d1d0cbdf333411530ebd" 
      } 
     }, 
     { 
      "fb_id": "333", 
      "name": "name3", 
      "user_img": "img url3", 
      "title": "asdad", 
      "description": "asdads", 
      "rating": 5, 
      "_id": { 
       "$oid": "5841d4c2174270f807084721" 
      } 
     }, 
     { 
      "fb_id": "444", 
      "name": "name4", 
      "user_img": "imgurl4", 
      "title": "adasd", 
      "description": "kjnkj", 
      "rating": 1, 
      "_id": { 
       "$oid": "5841d569eae1b6600ea1ca92" 
      } 
     } 
    ], 
    "__v": 0 
} 

の私の実際の文書です。

これが今の私のクエリです:

Review.find({ product_id: '583ae172231f5ec01db5727e' }, { 'reviews.$.fb_id': { $in: <array of fb_id> } }, function(err, results) { 
    if (err) { 
     throw err; 
    }; 
    console.log(results) 

}); 

しかし、それは私に、このエラーを与える:

MongoError: Unsupported projection option: reviews.$.fb_id: { $in: [ 111.0 ] } 

EDIT:小さなクエリの後、今私はいくつかの結果を得るためにしています。しかし、結果にはfb_idのものと一致する最初のオブジェクトだけがあり、すべてではありません。

どうすればいいか教えてください。

+0

これを見てください。 http://stackoverflow.com/a/40932617/2683814基本的に$ filter aggregator演算子を使用して、指定された条件に一致するすべてのレコードを返します。 – Veeram

答えて

0

これはreferenceに使用できます。 あなたのコードは次のようなものになります。

Review.find({ 
    product_id: '583ae172231f5ec01db5727e' 
    }, 
    { 
     reviews: { 
      $elemMatch: { 
       fb_id: { 
        $in: <array of fb_id> 
       } 
      } 
     } 
    }, 
    { 
     _id: 0, 
     'reviews.$': 1 
    } 
, function(err, results) { 
    if (err) { 
     throw err; 
    }; 
    console.log(results) 
}); 
+0

これは、配列から一致する最初の項目のみを返します。 'product_id'のために – v1shnu

+0

と一致するすべての項目を返すわけではありません!それはユニークであるはずですか? –

+0

はい製品IDは一意です。そして、その製品IDについてのみfb Idと一致するレビューが必要です。 – v1shnu

関連する問題