2017-01-10 12 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"))))); 

おかげ

関連する問題