2016-06-30 14 views
1

Wie schreibe ich diese Abfrage auf Java API? ‚‘ Mittel ‚oder‘ Klauselschreiben mongodb syntax auf java api

db.questions.find({ user_id: /bc/ },{user_name:/bc/},{age:/2/}) 

Ich habe verschiedene Möglichkeiten ausprobiert, aber ich habe erfolgreich nur eine Option. Wie fügt man mehrere Optionen mit der Klausel "oder" hinzu?

hier mein Code:

MongoClient mongoClient; 
       DB db; 

       DBCollection table; 
       DBCursor cursor = null; 

       mongoClient = new MongoClient("localhost", 27017); 
       db = mongoClient.getDB("stackoverflow"); 
       boolean auth = db.authenticate("aku", "kamu".toCharArray()); 
       table = db.getCollection("questions"); 
       cursor = table.find(new BasicDBObject("user_id", java.util.regex.Pattern.compile("milk"))); 
       while (cursor.hasNext()) { 
        DBObject object = cursor.next();%> 
        out.print(object.get("user_id")); 
       } 

Mit mySQL, die Abfrage ist:

select * from Fragen, bei denen User_id like '% bc%' oder user_name wie% bc% oder Alter wie% 2%

ich bin neu in mongoDB, ich fühle mich wie es ziemlich schwierig ist, Anfragen von mySQL zu konvertieren ..

hier der Fehler enter image description here

Antwort

2

Sie können das $or Operator - manual link

db.questions.find("{ $or : [user_id: '/bc/' ,user_name:'/bc/',age:'/2/'] }") 

Sie diese Abfrage in Java wie folgt verwenden können:

FindIterable<Document> iterable = db.getCollection("questions").find("{ $or : [user_id: '/bc/' ,user_name:'/bc/',age:'/2/'] }"); 

iterable.forEach(new Block<Document>() { 
    @Override 
    public void apply(final Document document) { 
     System.out.println(document); 
    } 
}); 
+0

Entschuldigung, ich meine, wie man diese Abfrage auf Java-API schreibt ... – beboy

+0

alles andere, was Sie brauchen, Kumpel? –

+0

hey bro, wie man es auf Web-Projekt (Jsp) anwenden .. es kann nicht implementiert werden BTW danke, ich weiß nur, dass Weg, so kann die Abfrage direkt geschrieben werden auf Java Api so ... – beboy

0

Ich bin nicht sicher, ob Ihre Frage bereits beantwortet ist, aber wenn Sie Verwenden Sie eine spätere Version oder mongodb Java-Treiber, kann es auf diese Weise geschrieben werden. Ich weiß nicht, wie BasicDBObject funktioniert, ich bin eher an Dokumente gewöhnt. Beide Werke.

List<Document> orQueryList = new ArrayList<Document>(); 
orQueryList.add("user_id", "bc"); 
orQueryList.add("user_name", "bc"); 
orQueryList.add("age", "2"); 

Document orDoc = new Document("$or", orQueryList); 

MongoCursor<Document> cursor = table.find(orDoc).iterator(); 

while (cursor.hasNext()) { 
    Document dbObj = cursor.next(); 

    System.out.println(dbObj.getString("user_id"); 
} 
+0

danke für die Hilfe @tan Kim Loong, eigentlich meine Fragen ist noch nicht beantwortet, ich benutze mongoDB api Version 2.X, ich werde versuchen, Ihre Antwort auf meine Quelle zu implementieren ... – beboy

+0

ist immer noch Fehler, sagt int kann nicht in String-Mate konvertiert werden. – beboy

+0

Es sollte bedeuten, dass Ihr Feld "user_id" eine Ganzzahl ist. Verwenden Sie "dbObj.getInteger (" user_id ")" oder "Integer.parseInt (dbObj.get (" user_Id "). toString()) 'stattdessen. –