2016-05-16 11 views
2

以下のクエリを使用してdb.collection.aggregate()を使用しています。 私は、投影されたフィールドが以下に指定されたものと正確に一致する結果を得ます。この基準に合致する文書の総数も取得したい。MongoDB集計とプロジェクトの合計件数

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

:これは追加私は今、レスポンスとしてこれを取得していて、しかし

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

:私は、以下のオプションを追加する必要があることがわかったいくつかの研究の後

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 }, 
    ]) 

カウントは正しいですが、私が投影したいフィールドはもはや存在しません。カウントと1つの結果に投影したいフィールドを得る方法はありますか?または、私は2つの別々のクエリを実行する必要があります(1つはカウント用、もう1つはプロジェクトにしたい)。 {_id: { "タイトル": "$タイトル"、 "年齢": "$年齢"、 "都市":

+0

でアクセスできます。後者は、前者と共通していません。そして、後者は正確に1つの結果を返し、 'count'は文書の総数です。そうでない場合は、セットアップでさらに深刻な問題があります。 –

+0

Thanks Markus。私は二番目が最初のものとは関係がないことを理解しています。質問を編集してより意味をなさせるようにしました。 2番目の部分は私が最初に追加するものです。同じ基準に合致する文書の総数を得るという意図がある。 – timhysniu

答えて

0

は、あなたのアグリゲーションパイプライン

{$グループにこれを追加 "$市"、 "location:" "$ location"、 "post_id": "$ post_id"、 "score": "$ score"}、件数:{$ sum:1}}})

1

はい、可能です。グループ化された文書には、$push

+0

ありがとうございました。どのようにスコアを追加するか分かっていますか?私は他のフィールドと同じようにしようとしています:{...、score: "$ score"}でも運はありません。 – timhysniu

+0

$プロジェクトの後、スコアは普通のフィールドで、他のフィールドと同様にアクセスできます。何か「間違っている」ことが起こった場合、おそらく失敗はスコアそのものを得る前です。 – libik