2016-05-16 188 views
2

我正在使用db.collection.aggregate()使用下面的查詢。 我得到的結果很好,其中投影字段完全是下面指定的字段。我也想得到符合這個標準的文件總數。MongoDB聚合和項目總數結果

db.collection.aggregate([ 
     { $match: { "age": {"$gte": 20, "$lte": 30}} }, 
     { $lookup: { from: "photos", localField: "post_id", foreignField: "post_id", as: "photos"} }, 
     { $project: { 
      "title": 1, 
      "photos.path": 1, 
      "age": 1, 
      "city": 1, 
      "location": 1, 
      "post_id": 1, 
      "score": { "$meta": "textScore"} 
     } }, 
     { $sort: { score: { $meta: "textScore" } } }, 
     { $skip: 0 }, 
     { $limit: 30 }, 
    ]) 

經過一番研究,我發現,我需要添加下面的選項:

 { $group: { _id: null, count: { $sum: 1 } } } 

然而,這種增加現在我得到這樣的迴應:

 { "_id" : null, "count" : 400 } 

的計數是正確的,但我想要投影的字段不再存在。有沒有一種方法來獲得計數和我想投射的領域中的一個結果?或者我必須運行兩個單獨的查詢,一個用於計數,另一個用於我想要投影的字段?

+0

訪問分組的文檔。後者與前者沒有共同之處。後者應該返回1個結果,'count'是文檔的總數。如果沒有,你的設置中會遇到一些更嚴重的問題。 –

+0

感謝Markus。我明白第二個與第一個無關。我編輯了這個問題,使它更有意義。第二部分是我加入第一部分的內容。意圖是獲得符合相同標準的文件總數。 – timhysniu

回答

0

添加到您的聚集管道

{$組:{_id: { 「稱號」: 「$標題」, 「年齡」: 「$時代」, 「城市」: 「$城市」, 「location」:「$ location」,「post_id」:「$ post_id」,「score」:「$ score」},count:{$ sum:1}}})

1

是的,可以使用$push

+0

工作感謝你。你知道我怎麼會加分嗎?我正在嘗試它,就像其他領域:{...,得分:「$分」}但沒有運氣 – timhysniu

+0

$項目後,得分是普通的領域,可以像其他人一樣訪問。如果發生了「錯誤」,那麼錯誤可能是在獲得分數之前。 – libik