2017-02-05 5 views
1

базы данных MongoDB я хранить документы в формате:Создания Spring Data Aggregation множественных 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

Мне нужно проверить true или false Я думал сделать это через список И затем проверить, есть ли данные в коллекции или нет. – Garazd

ответ

0

Вы можете использовать что-то вроде этого. Это будет учитывать все количество документов, соответствующих приведенным ниже критериям.

Regular Query

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

Использование Aggregation

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

Когда вы пытаетесь найти агрегированный запрос, появляется сообщение об ошибке: ReferenceError: userFromId не определено. Скажите, что я делаю неправильно? – Garazd

+0

'userFromId' и' userToId' являются входными значениями. Замените их входными значениями. Вы должны выполнить указанные выше запросы в оболочке mongo. – Veeram

+0

Прости, это моя вина. Благодарим за терпение. – Garazd

Смежные вопросы