2016-08-17 65 views
1

我希望能夠匹配/過濾來自whiskey.style的特定風格。

我想知道是否由於OID的格式不匹配。我試過的toString()的文件似乎表明 - 可能需要調查這更..

這裏是我的查詢/ $匹配對象

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

我管線:

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

這如果我只爲$ match包含_id/$ in,但它不會與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 } } 
] 

更新

我將它轉換成一個對象ID,因爲我讀過的聚集可能有問題的鑄造串,但我還是我沒有得到任何回報預期的匹配:

mongoose.Types.ObjectId(obj.style); 

現在,你可以看到風格ID是不不再是一個字符串,但仍然$比賽似乎並沒有工作:

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

是風格對_id字段的引用?如果是的話不應該風格和$ in子句被指定爲ObjectId而不是隻是id ..我的意思是ObjectId(57953144abfaa62383341a72)? – user641887

+0

是的。它是。我會嘗試的。這是我在發佈此消息時的假設。 – NoobSter

+0

我試過轉換ObjectID('字符串id'),但沒有運氣。 – NoobSter

回答

1

想通了:

我不得不修改和添加我的風格主要對象/沒有嵌套,以濾除

{ 
    "$project": { 
     "weight": stack[0], 
     "whiskey": "$$ROOT", 
     "style": "$style", <--- added 
     "collection": 
     collect[0] 
    } 

由於某種原因,它不能過濾嵌套的$$ ROOT對象。

如果我能在文檔中找到它,我將添加更多詳細信息。或者,如果其他人想擴大答案 - 我寧願接受,而不是我自己的。