2012-04-07 6 views
15

Ich habe einige Dokumente erstellt und einige einfache Abfragen erstellt, aber ich kann keine Abfrage erstellen, die Dokumente finden würde, wo ein Feld gerade existiert.Wie kann ich überprüfen, ob ein Feld in MongoDB existiert oder nicht?

Zum Beispiel nehme an, dies ist ein Dokument:

{ "profile_sidebar_border_color" : "D9B17E" , 
    "name" : "???? ???????" , "default_profile" : false , 
    "show_all_inline_media" : true , "otherInfo":["text":"sometext", "value":123]} 

Jetzt möchte ich eine Abfrage, die alle Dokumente bringen, wo der Text in otherInfo etwas in ihm hat.

, wenn kein Text ist, dann wird die otherInfo einfach so sein: "otherInfo":[]

Also habe ich die Existenz des text Feld in otherInfo überprüfen möchten.

Wie kann ich das erreichen?

Antwort

50

können Sie den $exists Operator in Kombination mit der . Notation. Die bloße Abfrage in dem Mongo-Shell soll wie folgt aussehen:

db.yourcollection.find({ 'otherInfo.text' : { '$exists' : true }}) 

Und ein Testfall in Java könnte wie folgt aussehen:

BasicDBObject dbo = new BasicDBObject(); 
    dbo.put("name", "first"); 
    collection.insert(dbo); 

    dbo.put("_id", null); 
    dbo.put("name", "second"); 
    dbo.put("otherInfo", new BasicDBObject("text", "sometext")); 
    collection.insert(dbo); 

    DBObject query = new BasicDBObject("otherInfo.text", new BasicDBObject("$exists", true)); 
    DBCursor result = collection.find(query); 
    System.out.println(result.size()); 
    System.out.println(result.iterator().next()); 

Ausgang:

1 
{ "_id" : { "$oid" : "4f809e72764d280cf6ee6099"} , "name" : "second" , "otherInfo" : { "text" : "sometext"}} 
0

Wäre nicht die Abfrage in der Abfrage alle Elemente mit dem Textwert, siehe unten.

db.things.find({otherInfo:{$in: [text]}}); 

BasicDBObject query = new BasicDBObject(); 
query.put("otherInfo", new BasicDBObject("$in", "[text]")); 
var result = db.find(query); 
+0

Hallo Danke für die antwort, wie kann ich das in Java tun? – jan1

+0

http://www.mongodb.org/display/DOCS/Java+Tutorial –

Verwandte Themen