-1

Проблема при запросе встроенного документа в mongo db. Я пытаюсь получить conversationId для пользователей, но он возвращает null.Невозможно получить итоговый результат в встроенном документе mongo путем запроса

Образец документа:

{ 
"_id" : ObjectId("5787391f191fda3a4430c749"), 
"conversationId" : "fWFGIr0xAbQytmVcQIPV", 
"user" : [{_id : "800", "name" : "Tim"},{_id : "500", "name" : "Kingsley"}, 
{_id : "400", "name" : "Roger"}], 
"type" : "PRIVATE" 
} 

Запрос:

Aggregation agg = newAggregation(
      match(Criteria.where("type").is("PRIVATE")), 
      group("conversationId").push("user.id").as("users"), 
      match(Criteria.where("users").all(Arrays.asList('800','400','500'))) 
      ); 
    AggregationResults<Rooms> groupResults = mongoOps.aggregate(agg, ROOMS, Rooms.class); 
     List<Rooms> result = groupResults.getMappedResults(); 
     result.get(0).getId() // returns null 

result.get(0).getId() возвращается нуль, согласно моему запросу я ожидал Id разговор, который присутствует для пользователей.

+0

Какой результат вы ожидаете? – chridam

+0

@chridam: Я ожидаю, что этот разговор вернется, но я получаю null. – Karthik

ответ

1

Я не уверен, почему вы группируетесь на talkId, а затем создаете набор с идентификатором пользователя, который принимал участие в этом разговоре.

Если ваш желаемый результат - найти разговор, в котором пользователи «800», «400» и «500», то вы можете сразу использовать запрос поиска с помощью $ all.

Монго запрос будет выглядеть следующим образом:

db.test.find({"user._id":{"$all":["800","500","400"]}}) 
+0

Да, мой желаемый результат подобен этому. Но, не найдя нужный разговор Id – Karthik

+0

@ Karthik: Вы пробовали с вышеуказанным запросом? вы можете вставить этот Java-код? – Nattyk

+0

Агрегация agg = newAggregation ( match (Criteria.where ("type"). Is ("PRIVATE")), группа ("talkId"). Push ("user._id"). As ("users"), match (Criteria.where («users»). All (userProfileIds)) – Karthik

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

  • Нет связанных вопросов^_^