1. 程式人生 > >用MongoTemplate查詢指定欄位的正確奧義

用MongoTemplate查詢指定欄位的正確奧義

這裡舉一個我個人犯的一個錯誤,希望看到此博文的人能避免犯同樣的錯誤:
在CompanyInfo這個類中,它其中包含一個List型別的AccountInfo屬性。然後好戲開始了,我希望通過BasicDBObject的方式,構造出只查詢出AccountInfo屬性的accountInfos欄位。這裡貼出我的查詢程式碼資料結構
這裡寫圖片描述

DBObject queryObject = new BasicDBObject();
queryObject.put("accountInfos._id",new ObjectId(id));
DBObject fields = new BasicDBObject();
fields.put
("_id",false); fields.put("accountInfos",true); List<AccountInfo> accountInfos = mongoTemplate.find(query, AccountInfo.class, "companyInfo");

哈哈哈,也許大牛們已經看出我錯在哪裡了,我天真地以為我最終要查詢出來的是AccountInfo物件,所以在find方法中用AccountInfo.class來接受返回值其實這個返回的結果仍然是一個CompanyInfo的文件,只是該文件中只查詢除了制定的accountInfos欄位。因此仍然需要用CompanyInfo來作為返回值型別。


修改後的程式碼應為:


DBObject queryObject = new BasicDBObject();
queryObject.put("accountInfos._id",new ObjectId(id));
DBObject fields = new BasicDBObject();
fields.put("_id",false);
fields.put("accountInfos",true);
CompanyInfo companyInfo = mongoTemplate.find(query, CompanyInfo.class, "companyInfo");
List<AccountInfo> accountInfos = companyInfo.getAccountInfos();