2016-06-29 5 views
0

初めてmongo db用にjavaを使用して集約クエリを作成する作業を進めています。 私が以前に書いたシェルクエリをjava形式に変換することができません。 私はいくつかの問題に直面しています。以下は、私がすでに書いたシェルクエリですが、うまくいきます。javaを使用してmongo db集約クエリを実行できません

客室の日付が設定されています。

{ 
"_id": ObjectId("571c5724db62826826d28d08"), 
"conversationId": "6puebew70kke29", 
"userId": "600", 
"firstName": "Test", 
"profileImagePath": "", 
"created": ISODate("2016-04-24T05:18:28.753Z"), 
"__v": 0 
} 
{ 
    "_id": ObjectId("571c5724db62826826d28d09"), 
"conversationId": "6puebew70kke29", 
"userId": "900", 
"firstName": "User", 
"profileImagePath": "", 
"created": ISODate("2016-04-24T05:18:28.754Z"), 
"__v": 0 
} 

    { 
"_id": ObjectId("571c574edb62826826d28d0b"), 
"conversationId": "fsny11z742kpgb9", 
"userId": "600", 
"firstName": "FitTest", 
"profileImagePath": "", 
"created": ISODate("2016-04-24T05:19:10.192Z"), 
"__v": 0 
} 

    { 
"_id": ObjectId("571c574edb62826826d28d0c"), 
"conversationId": "fsny11z742kpgb9", 
"userId": "800", 
"firstName": "Dev", 
"profileImagePath": "", 
    "created": ISODate("2016-04-24T05:19:10.193Z"), 
"__v": 0 
    } 



rooms.aggregate([{ 
     $match: { 
      type: 'PRIVATE' 
     } 
    }, { 
     $group: { 
      _id: '$conversationId', 
      users: { 
       $push: '$userId' 
      } 
     } 
    }, { 
     $match: { 
      users: { 
       $all: [friendProfileData.id, userprofileData.id] 
      } 
     } 
    }, ] 

上記のクエリのJavaコード。

まだ完全に完了することはできませんが、私はいくつかの表現を書く方法を知らないのです。 あなたのご協力をお待ちしております。

+2

あなたがサンプル「部屋」文書で質問を更新してくださいもらえますか? – notionquest

+0

@notionquest:私はそれを確認して更新しました。 – Karthik

+0

提供されたサンプルドキュメントには、friendProfileDataおよびuserprofileData属性がありません。最初は、あなたが提供したMongoのクエリは、あなたの要件のための有効なバージョンであると仮定しました。しかし、今は私が100%それが実用的なバージョンであるかどうか確信していません。 – notionquest

答えて

1

「friendProfileData」属性と「userprofileData」属性が最後の「一致」に含まれているかどうかはわかりません。

要件に応じて「Filters.all」ステートメントを適宜変更することができます。さもなければ、このコードはあなたの要件を満たし、 "MongoDB 3.2.0"と "Mongo Java Driver 3.2.2 Jar"でうまく動作します。

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

import org.bson.Document; 
import org.bson.conversions.Bson; 

import com.mongodb.MongoClient; 
import com.mongodb.client.AggregateIterable; 
import com.mongodb.client.MongoCursor; 
import com.mongodb.client.MongoDatabase; 
import com.mongodb.client.model.Accumulators; 
import com.mongodb.client.model.Aggregates; 
import com.mongodb.client.model.Filters; 

public static void main(String[] args) { 
     MongoClient client = new MongoClient(); 
     MongoDatabase database = client.getDatabase("localhost"); 

     List<Bson> aggregateList = new ArrayList<>(); 

     aggregateList.add(Aggregates.match(Filters.eq("type", "PRIVATE"))); 
     aggregateList.add(Aggregates.group("$conversationId", Accumulators.push("users", "$userId"))); 
     aggregateList.add(Aggregates.match(Filters.all("users", Arrays.asList("1", "800")))); 

     AggregateIterable<Document> mongoCollectionList = database.getCollection("rooms") 
       .aggregate(aggregateList); 

     MongoCursor<Document> mongoCursor = mongoCollectionList.iterator(); 

     while (mongoCursor.hasNext()) { 
      System.out.println(mongoCursor.next()); 

     } 

    } 

Mavenの依存関係は: -

上記は以下のMavenの依存関係を正常に動作します。

<dependency> 
    <groupId>org.mongodb</groupId> 
    <artifactId>mongo-java-driver</artifactId> 
    <version>3.2.2</version> 
</dependency> 

あなたは以下のjarファイルを使用する場合は、上記のを動作しない場合がありますのでご注意ください: -

<dependency> 
    <groupId>org.mongodb</groupId> 
    <artifactId>mongodb-driver</artifactId> 
    <version>3.2.2</version> 
</dependency> 
+0

上記のコードを使用しましたが、以下のエラーが発生しました。DBCollectionタイプの集計(List <?extends DBObject>)は引数には適用されません – Karthik

+0

Mongo Java Driverのバージョンを確認してください。上記の解決策は、以下のジャーでうまく動作するはずです。このソリューションは正常にテストされました。 \t \t \t \t \t org.mongodb \t \t \t のmongo-javaのドライバ \t \t \t 3.2.2 \t \t notionquest

+0

私は何のバージョンとまったく同じjarファイルを使用しています言及している。 – Karthik

関連する問題