2017-02-05 57 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

您可以添加預期的輸出?你爲什麼要使用聚合? – Veeram

+0

我需要檢查真或假 我認爲通過清單 然後檢查集合中是否有數據。 – Garazd

回答

0

您可以使用類似這樣的東西。這將計算符合以下標準的所有文檔數量。

常規查詢

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

使用聚合

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

當您試圖聚合查詢時會產生錯誤消息:ReferenceError:userFromId未定義。 告訴我我做錯了什麼? – Garazd

+0

'userFromId'和'userToId'是輸入值。用輸入值替換它們。您應該在mongo shell中運行上述查詢。 – Veeram

+0

對不起,這是我的錯。 感謝您的耐心等待 – Garazd