2016-08-17 84 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对象。

如果我能在文档中找到它,我将添加更多详细信息。或者,如果其他人想扩大答案 - 我宁愿接受,而不是我自己的。

相关问题