2017-01-01 14 views
0

фона:Java MongoTemplate исключить дочерние отношения в запросе

Я использую Весна-загрузки и MongoDB.

public class User { 
    @DBRef 
    private List<Contact> contacts; 
    ... 


public class Contact { 

    @DBRef 
    private List<Booking> bookings; 
    ... 

    public Contact(){} 

    public Contact(Booking booking){ 
     this.bookings = new ArrayList<Booking>(); 
     this.bookings.add(booking); 
     ... 
    } 

@Override 
public List<Contact> findAllContactsForUser(String id) { 
    Query query = new Query().addCriteria(Criteria 
      .where("_id").is(id)); 
    query.fields().include("contacts"); 
    User user = mongoTemplate.findOne(query, User.class); 
    return user.getContacts(); 
} 

Выход из findAllContactsForUser:

[ 
    { 
    "field":"value", 
    "bookings": [ 
        "field":"value" 
       ] 
    } 
] 

Проблема:

Результат я хочу:

[ 
    { 
    "field":"value", 
    "bookings": null 
    } 
] 

Как исключить отношения бронирований из моего запроса в findAllContactsForUser ?

+0

Я вижу новый ArrayList в конструкторе вашего контакта. Я не вижу никаких доказательств того, что это называется, но я подозреваю, что это так. Можете ли вы добавить код для пользователя тоже (setContacts, getContacts + constructors) + SetBookings контакта, getBookings – alexbt

ответ

0

Вам просто нужно исключить поле contacts.bookings в запросе:

@Override 
public List<Contact> findAllContactsForUser(String id) { 
    Query query = new Query().addCriteria(Criteria.where("_id").is(id)); 
    query.fields().exclude("contacts.bookings"); 
    User user = mongoTemplate.findOne(query, User.class); 
    return user.getContacts(); 
} 

Кстати, нет необходимости в .include(contacts), поля не включены по умолчанию.

+1

Это просто дает мне пустой массив = []. – rilar

+0

Я тестировал вашу модель, и она работает для меня. Можете ли вы опубликовать полный код для вашего класса Contact? – alexbt

+0

У вас есть где-нибудь в вашем коде, где вы делаете «новый ArrayList()» для бронирования? – alexbt