2016-06-29 6 views
0

ausführen Ich arbeite zum Schreiben von Aggregatabfragen mit Java für Mongo-DB zum ersten Mal. Ich kann die Shell-Abfrage, die ich zuvor geschrieben habe, nicht in das Java-Format konvertieren. Ich stehe vor einigen Problemen. Das Folgende ist die Shell-Abfrage, die ich bereits geschrieben habe und es funktioniert gut.Nicht in der Lage, die Mongo-Db-Aggregat-Abfrage mit Java,

Datum für Räume festgelegt.

{ 
"_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-Code für die obige Abfrage.

Nicht in der Lage, es vollständig noch zu vervollständigen Ich bin mir nicht bewusst, wie man einige Ausdrücke schreibt. Ihre Hilfe wird geschätzt.

+2

Könnten Sie bitte die Frage mit Probe „Räumen“ Dokument aktualisieren? – notionquest

+0

@notionquest: Ich habe aktualisiert, bitte überprüfen Sie es. – Karthik

+0

Die bereitgestellten Beispieldokumente haben keine Attribute friendProfileData und userprofileData. Anfangs nahm ich an, dass die Mongo-Abfrage, die Sie zur Verfügung gestellt haben, eine funktionierende Version für Ihre Anforderung ist. Aber jetzt bin ich nicht 100% sicher, ob es eine funktionierende Version ist. – notionquest

Antwort

1

Ich habe eine Annahme gemacht, da ich nicht sicher bin über "friendProfileData" und "userprofileData" -Attribute in der letzten "Übereinstimmung".

Sie können die "Filters.all" -Anweisung entsprechend Ihrer Anforderung entsprechend ändern. Ansonsten sollte dieser Code Ihren Anforderungen entsprechen und er funktioniert gut mit "MongoDB 3.2.0" und "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 Abhängigkeit: -

die oben funktioniert mit der unter Maven Abhängigkeit.

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

Bitte beachten Sie, dass die oben nicht arbeiten können, wenn Sie das unten stehende Glas verwenden: -

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

Ich habe den obigen Code verwendet, aber den folgenden Fehler erhalten. Die Methode Aggregat (List ) im Typ DBCollection ist nicht anwendbar für die Argumente (Liste ) – Karthik

+0

Bitte überprüfen Sie Ihre Mongo Java Driver-Version. Die obige Lösung sollte mit dem unten stehenden Gefäß gut funktionieren. Die Lösung wurde erfolgreich getestet. \t \t \t \t \t org.mongodb \t \t \t Mongo-java-Treiber \t \t \t 3.2.2 \t \t notionquest

+0

verwende ich genau das gleiche Glas mit der Version, was Sie habe erwähnt. – Karthik