2015-08-18 62 views
2

我有項目架構,其中有各自的餐廳的項目詳細信息。我必須用'類型'和'類別'(類型和類別是項目模式中的字段)來查找特定餐館和小組的所有項目,我可以按照我的意願對項目進行分組,但是我無法獲得完整的項目目的。 我的查詢:在MongoDB彙總中返回整個對象

db.items.aggregate([{ 
    '$match': { 
     'restaurant': ObjectId("551111450712235c81620a57") 
    } 
}, { 
    '$group': { 
     id: { 
      '$push': '$_id' 
     } 
     , _id: { 
      type: '$type' 
      , category: '$category' 
     } 
    } 
}, { 
    $project: { 
     id: '$id' 
    } 
}]) 

我已經通過將每個字段的值進行分組,然後投射它看到一個方法。由於在我的項目模式中有很多字段,我不認爲這對我來說是很好的解決方案,我可以只獲取完整的對象而不是Ids。

回答

7

那麼你可以隨時使用$$ROOT提供您的服務器的MongoDB 2.6或更高版本:

db.items.aggregate([ 
    { '$match': {'restaurant': ObjectId("551111450712235c81620a57")}}, 
    { '$group':{ 
     _id : { 
      type : '$type', 
      category : '$category' 
     }, 
     id: { '$push': '$$ROOT' }, 
    }} 
]) 

這是要每整個對象放入數組中的成員。

當你這樣做的時候你需要小心,因爲更大的結果你肯定會打破BSON限制。

我建議你試圖構建某種「搜索結果」,「面數」或類似的。爲此,您最好針對「聚合」部分運行單獨的查詢,併爲實際文檔結果運行一個查詢。

這比將所有東西組合在一起更安全和更靈活。

+0

謝謝@Blakes Seven今天我學到了一件新事物。這可以幫助我,但是我已經完成了{'$ push':'$$ ROOT'},因爲只添加$ ROOT給了我空的結果。 – zulekha