Как получить данные с указанным объектом в Spring Data Mongo? - PullRequest
0 голосов
/ 02 октября 2019

Это City класс документов, который я использовал.

@Document("city")
public class City {
    @Id
    private String id;
    @Indexed(unique = true)
    private String name;
    @DBRef(lazy = true)
    private District district;

    public City() {
    }

    public City(String id) {
        this.id = id;
    }

    public City(String id, String name, District district) {
        this.id = id;
        this.name = name;
        this.district = district;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public District getDistrict() {
        return district;
    }

    public void setDistrict(District district) {
        this.district = district;
    }
}

, и это District класс документов

@Document("district")
public class District {
    @Id
    private String id;
    @Indexed
    private String name;

    public District() {
    }

    public District(String id) {
        this.id = id;
    }

    public District(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

, а это district данные коллекции.

/* 1 */
{
    "_id" : ObjectId("5d9482f3ff7ab743f0542070"),
    "name" : "Ampara",
    "_class" : "com.test.sample.model.District"
}

/* 2 */
{
    "_id" : ObjectId("5d9482f3ff7ab743f0542071"),
    "name" : "Anuradhapura",
    "_class" : "com.test.sample.model.District"
}

и это данные коллекции city.

/* 1 */
{
    "_id" : ObjectId("5d948333ff7ab743f0542089"),
    "name" : "Polgampola",
    "district" : {
        "$ref" : "district",
        "$id" : ObjectId("5d9482f3ff7ab743f0542070")
    },
    "_class" : "com.test.sample.model.City"
}

/* 2 */
{
    "_id" : ObjectId("5d948333ff7ab743f054208a"),
    "name" : "Porawagama",
    "district" : {
        "$ref" : "district",
        "$id" : ObjectId("5d9482f3ff7ab743f0542070")
    },
    "_class" : "com.test.sample.model.City"
}

/* 3 */
{
    "_id" : ObjectId("5d948333ff7ab743f054208b"),
    "name" : "Akkaraipattu",
    "district" : {
        "$ref" : "district",
        "$id" : ObjectId("5d9482f3ff7ab743f0542071")
    },
    "_class" : "com.test.sample.model.City"
}

это класс хранилища для указанного выше городского документа класса

@Repository
public interface CityDao extends MongoRepository<City,String> {
    List<City> findByDistrict(String id);
}

вкласс города, я использовал ссылочный класс документа под названием District. это еще один документ. Мне нужно получить города, которые принадлежат одному району. findByDistrict(String id) метод не возвращает значения. Его просто возвращают пустым List. Так как я могу это сделать?

1 Ответ

0 голосов
/ 03 октября 2019

Я пробовал с другой альтернативой. Как сказал @pvpkirn, Вы не можете запросить с помощью @ DBRef . Но я попробовал с MongoOperations. При этом мы можем передать объекты Filter как объект Json. Используя это, я получил ответ. Это то, что я пробовал.

public List<City> findByDistrictId(String districtId) {
        final Bson filter = eq("district.$id", new ObjectId(districtId));
        FindIterable<Document> documents = super.mongoOperations.getCollection("city").find(filter);
        List<City> cities = new ArrayList<>();
        for(Document document : documents){
            City city = new City(document.getObjectId("_id").toString(),document.getString("name"),new District(districtId));
            cities.add(city);
        }
        return cities;
    }

здесь я использовал com.mongodb.client.model.Filters.eq, чтобы получить соответствующий bson объект.

...