2017-02-05 8 views
1

私は形式で文書を保存したMongoDBのデータベースを照会:で、特定の日付のために(もしあれば)データベース内のレコードの数を取得する方法の作成複数のMongoDBの春データ集約は

{ 
     "achievement": [ 
     { 
      "userFromId":"max", 
      "userToId":"peter", 
      "date":"2016-01-25", 
      "pointCount":1, 
      "description":"good work", 
      "type":"THANKS" 
     } 
     ] 
    } 

人々は他の人々に感謝しています。 私がデータを取得するクエリを作成:

DBObject clause1 = new BasicDBObject("userFromId", userFromId); 
    DBObject clause2 = new BasicDBObject("userToId", userToId); 
    DBObject clause3 = new BasicDBObject("sendDate", localDate); 
    DBObject clause4 = new BasicDBObject("type", Thanks); 
    BasicDBList or = new BasicDBList(); 
    or.add(clause1); 
    or.add(clause2); 
    or.add(clause3); 
    or.add(clause4); 
    DBObject query = new BasicDBObject("$or", or); 

しかし、私はレコード数を取得する方法と、集約を使用してクエリを書き換えることができます方法がわかりませんか? 例:

 Aggregation aggregation = Aggregation.newAggregation(
      Aggregation.group("userFromId") 
       .first("userFromId").as("userFromId") 
       .sum("pointCount").as("pointCount")); 

パラメータを追加する方法がわかりません。 データベースへのデータが存在しない場合の戻り値は何ですか?

ありがとうございました

+0

を使用して

db.collection.count({ $or: [ { "userFromId": userFromId }, { "userToId": userToId } ] }); 

あなたが期待される出力を追加することはできますか?なぜあなたは集計を使いたいのですか? – Veeram

+0

真偽をチェックする必要があります 私はリストを介してそれを作ろうと考えました そして、コレクションにデータがあるかどうかを確認してください。 – Garazd

答えて

0

このようなものを使用できます。これにより、以下の基準に一致するすべての文書数がカウントされます。

通常の問合せ集約

db.collection.aggregate([ 
    { $match: { $or: [ { "userFromId": userFromId }, { "userToId": userToId } ] } }, 
    { $group: { _id: null, count: { $sum: 1 } } } 
]); 
+0

クエリを集約しようとすると、エラーメッセージ「ReferenceError:userFromId not defined」が生成されます。 私は何が間違っているのか教えてください。 – Garazd

+0

'userFromId'と' userToId'は入力値です。それらを入力値に置き換えます。 mongoシェルで上記のクエリを実行する必要があります。 – Veeram

+0

申し訳ありませんが、それは私のせいです。 忍耐していただきありがとうございます – Garazd