Как сделать запрос в списке объектов в mongodb с помощью Java - PullRequest
0 голосов
/ 28 августа 2018

У меня есть список объектов на Java. ChatDTO имеет список ChatReceiver.

Структура ChatDTO выглядит следующим образом:

public class ChatDTO {

@Id
String uuidMessage;
List<ChatReceiver> chatReceiver;


public ChatDTO() {
}

public List<ChatReceiver> getChatReceiver() {
    return chatReceiver;
}

public void setChatReceiver(List<ChatReceiver> chatReceiver) {
    this.chatReceiver = chatReceiver;
}


public String getUuidMessage() {
    return uuidMessage;
}

public void setUuidMessage(String uuidMessage) {
    this.uuidMessage = uuidMessage;
}

}

И структура ChatReceiver выглядит следующим образом:

public class ChatReceiver {
String uuiUser;
Boolean received;
Date receivedDate;

public ChatReceiver() {
}

public String getUuiUser() {
    return uuiUser;
}

public void setUuiUser(String uuiUser) {
    this.uuiUser = uuiUser;
}

public Boolean getReceived() {
    return received;
}

public void setReceived(Boolean received) {
    this.received = received;
}

public Date getReceivedDate() {
    return receivedDate;
}

public void setReceivedDate(Date receivedDate) {
    this.receivedDate = receivedDate;
}
}

Мне нужно запросить элемент в списке ChatReceivers, используя Java, но я не знаю, как это сделать правильно. Я попробовал следующее, но не получил ожидаемого результата.

List<AggregationOperation> list = new ArrayList<>();
            list.add(Aggregation.match(Criteria.where("chatReceiver").in(uuidReceiver).and("received").is(false).and("read").is(false)));
            TypedAggregation<ChatDTO> agg = Aggregation.newAggregation(ChatDTO.class, list);
            List<ChatDTO> chatDTOList = mongoOperations.aggregate(agg, ChatDTO.class, ChatDTO.class).getMappedResults();

Как вы могли видеть, мне нужно получить все ChatDTO, которые содержат ChatReceiver, который содержит определенный параметр (uuidUser), и где логическое значение "Received" равно false. Другими словами, мне нужны все ChatDTO, которые не были получены определенным пользователем.

Можете ли вы помочь мне с этим запросом? Буду премного благодарен.

1 Ответ

0 голосов
/ 31 августа 2018

Мне нужно получить все ChatDTO, которые содержат ChatReceiver, который содержит определенный параметр (uuidUser) и где логическое значение «полученный» равно false. Другими словами, мне нужны все ChatDTO, которые не были получены определенным пользователем.

Похоже, вам просто нужно использовать Точка нотации MongoDB для запроса на основе полей в поддокументе.

db.getCollection('chatDTO').find({
   "chatReceiver.uuiUser" : "test2", "chatReceiver.received" : false 
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...