2016-08-17 4 views
1

whiskey.styleの特定のスタイルにマッチ/フィルタリングしたいと思っています。

OIDのフォーマットのために一致しないのだろうかと思います。

var pipeline = [ 
      { 
      "$project": { 
       "weight": stack[0], 
       "whiskey": "$$ROOT", 
       "collection": 
       collect[0] 
      } 
      }, 
      { 
      "$match": qObj.whiskeyFilter 
      }, { 
      "$sort": { 
       "weight": 1 
      } 
      }, { 
      "$limit": 12 
      }, { 
      "$skip": qObj.skip 
      }]; 

この:この多くを調査する必要があるかもしれません。ここ

は私のクエリ/ $マッチオブジェクト

var qObj.whiskeyFilter = { whiskey: { style: '57953144abfaa62383341a72' }, 
     _id: 
     { '$in': 
      [ 57a115304d124a4d1ad12d81, 
      57a114d64d124a4d1ad12d7f, 
      57a1152a4d124a4d1ad12d80, 
      57a9049906f3733623826538 ] } } 

私のパイプラインを..です - ドキュメントを示唆しているようだと私はtoString()を試してみました$一致のために_id/$をインクルードするだけで動作しますが、whiskey.styleと$は一致しません。ここで

集計から返されるものの例です:

[ { _id: 57a115304d124a4d1ad12d81, 
    weight: 1, 
    whiskey: 
    { _id: 57a115304d124a4d1ad12d81, 
     name: 'sample whiskey 2', 
     distiller: 578c04f76091bcd618f26e04, 
     style: 57953144abfaa62383341a72, 
     userVote: 0, 
     timestamp: Tue Aug 02 2016 16:48:32 GMT-0500 (CDT), 
     total: 1, 
     vote: 2, 
     __v: 0 }, 
    collection: 
    { _id: 57acb4ff093360bee276aae6, 
     user: 57919ac16fa0390856a9998f, 
     whiskey: 57a115304d124a4d1ad12d81, 
     __v: 0, 
     collected: true, 
     vote: 1, 
     timestamp: Thu Aug 11 2016 12:25:19 GMT-0500 (CDT), 
     favorite: true } } 
] 

更新

私は凝集を読んだように私は、OBJECTIDに変換していますキャストの問題を有していてもよく文字列に変換しますが、期待される一致についてはまだ返品がありません:

mongoose.Types.ObjectId(obj.style); 

今、スタイルIDが「いいえ」であることがわかります長い文字列が、それでも$マッチが動作していないよう:

match query : { whiskey: { style: 57953144abfaa62383341a72 }, 
    _id: 
    { '$in': 
     [ 57a115304d124a4d1ad12d81, 
     57a114d64d124a4d1ad12d7f, 
     57a1152a4d124a4d1ad12d80, 
     57a9049906f3733623826538 ] } } 
+0

スタイルは_idフィールドへの参照ですか?はいの場合は、スタイルと$句をidだけでなくObjectIdとして指定するべきではありません。私はObjectId(57953144abfaa62383341a72)を意味しますか? – user641887

+0

はい。そうです。私はそれを試みます。それは私がこれを投稿していたときの私の前提でした。 – NoobSter

+0

私はObjectID( 'string id')で変換しようとしましたが、運はありません。 – NoobSter

答えて

1

はそれを考え出した:

を私が主目的/

をネストされていないにすることによってフィルタリングするために自分のスタイルを変更し、追加する必要がありました
{ 
    "$project": { 
     "weight": stack[0], 
     "whiskey": "$$ROOT", 
     "style": "$style", <--- added 
     "collection": 
     collect[0] 
    } 

何らかの理由で、ネストされた$$ ROOTオブジェクトをフィルタリングできませんでした。

ドキュメントで見つけた場合は、さらに詳しく説明します。あるいは、他の誰かが答えを広げたいと思っているなら、私はそれを自分のものよりも受け入れることを好むでしょう。

関連する問題