2017-01-10 28 views
1

我想從用戶表中獲取關注者的數量,這基本上是使用java編程的數組列表。從MongoDB表中獲取arraylist的大小

我正在使用下面的查詢來使用命令行界面來計數。

db.userinfo.aggregate([{ $project : {followersCount : {$size: "$followers"}}}]) 

但我無法在java中創建相同的查詢,因爲我是新的。下面是我在java中編寫的代碼,我收到了com.mongodb.MongoCommandException:命令失敗,錯誤17124:'$ size的參數必須是數組,但是類型爲:int'錯誤。

AggregateIterable<Document> elements = collectionUserInfo.aggregate(
       Arrays.asList(new BasicDBObject("$project", new  BasicDBObject("followers", 
         new BasicDBObject("$size", new BasicDBObject("followers",1).put("followers",new BasicDBObject("$ifNull", "[]"))))))); 

任何人都可以請幫我這個

+0

我試過這個,它工作正常。 – Shravya

回答

2

你可以嘗試像與Java 8和蒙戈驅動3.x版的東西。您應該儘量不要使用舊類型(BasicDbObject),並儘可能使用api方法。

List<Integer> followersCount = collectionUserInfo.aggregate(
      Arrays.asList(Aggregates.project(Projections.computed(
        "followersCount", 
        Projections.computed("$size", "$followers")) 
        ) 
      )) 
    .map(follower -> follower.getInteger("followersCount")) 
    .into(new ArrayList<>()); 
+0

上面的代碼只有在新Docment(「$ size」,「$ followers」)的追隨者前面添加$後才適用於我。 – Shravya

+0

你說得對。這是一個錯字。更新了答案。 – Veeram

0

我想這和它工作得很好。

AggregateIterable<Document> elements = collectionUserInfo.aggregate(
       Arrays.asList(new BasicDBObject("$project", new BasicDBObject("followers", 
         new BasicDBObject("$size", "$followers"))))); 

感謝