2017-01-11 11 views
0

enter image description here私のuserinfoテーブル内の全フォロワーとフォロワーを取得しようとしているユーザーのアクティビティーを取得しようとしています。コレクションのすべてのドキュメントから配列リスト要素の合計数を取得する

私は以下のコマンドラインクエリを使用して、うまくいきました。合計カウントを取得しています。

db.userinfo.aggregate([ 
{ "$group": { 
    "_id": null, 
    "followersCount": { 
     "$sum": { 
      "$size": { $ifNull: [ "$followers", [] ] } 
     } 
    }, 
    "followingCount": { 
     "$sum": { 
      "$size": { $ifNull: [ "$i_am_following", [] ] } 
     } 
    } 
}} 
]) 

しかし、私はこれをJavaプログラミングを使用して複製できません。 BasicDBObjectsを使ってjavaでこのクエリを書くことができますか?これを行う方法は他にありますか?

ここでは、1人のユーザーのサンプルデータを示します。

db.userinfo.insert (
{ 
"username" : "user1", 
"useremail" : "[email protected]", 
"password" : "password", 
"firstname" : "firstname", 
"lastname" : "lastname", 
"dob" : "24-05-1992", 
"followers" : [ 
    { 
     "user" : "user2", 
     "from_date" : "2016-12-15 09:59:04" 
    }, 
    { 
     "user" : "user3", 
     "from_date" : "2016-12-15 08:59:04" 
    } 
], 
"i_am_following" : [ 
    { 
     "user" : "user2", 
     "from_date" : "2016-12-15 08:59:04" 
    }, 
    { 
     "user" : "user3", 
     "from_date" : "2016-12-15 09:59:04" 
    } 
] 
}) 
+0

は、あなたがこれまでに –

+0

BasicDBObject groupFields =新BasicDBObject( "_ ID"、null)を試してみました何私たちを見ます。 \t \t \t groupFields.put( "heartCount"、新BasicDBObject( "$和"、 \t \t \t \t \t \t \t新しいBasicDBObject( "$サイズ"、新BasicDBObject( "$ IFNULL"、は、Arrays.asList( "$ hearts "、新しいArrayList <>())))))); \t \t \t BasicDBObjectグループ=新しいBasicDBObject( "$ group"、groupFields);私はたくさんの異なる方法を試しましたが、実際には機能していないこれで終わりました。 – Shravya

+0

サンプルdocを追加することを検討してください。 – Veeram

答えて

0

このようなことを試すことができます。

import static com.mongodb.client.model.Accumulators.*; 
import static com.mongodb.client.model.Aggregates.*; 
import static com.mongodb.client.model.Projections.computed; 
import static java.util.Arrays.asList; 
import static java.util.Collections.EMPTY_LIST; 

Bson group = group(null, 
    sum("followersCount", computed("$size", 
     computed("$ifNull", 
      asList("$followers", EMPTY_LIST)))), 
    sum("followingCount", computed("$size", 
     computed("$ifNull", 
      asList("$i_am_following", EMPTY_LIST)))) 
); 

AggregateIterable <Document> output = userinfo.aggregate(asList(group)); 
+0

私はcom.mongodb.MongoCommandExceptionを取得しています:上記のコードを試したとき、コマンドはエラー168で失敗しました: '認識できない式' $ followers '' – Shravya

+0

私は3.4.1バージョンです。私はこの応答をサンプル文書とともに '{_id = null、followersCount = 2、followingCount = 2}'とします。 – Veeram

+0

私は以前3.4.0を使用していましたが、今はバージョンを3.4.1に変更しましたが、同じエラーが発生しています。 – Shravya

関連する問題