如何在Spring Data Mongo中使用引用对象获取数据?

时间:2019-10-02 16:29:59

标签: mongodb spring-boot spring-data spring-data-mongodb

这是我使用的func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?) -> Bool { UIViewController.preventPageSheetPresentation // ... return true } 文档类。

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)。那我该怎么办呢?

1 个答案:

答案 0 :(得分:0)

我尝试了另一种方法。正如@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对象。