2010-11-24 18 views
3

ich bin neu in mongoDB. Ich benutze mongoDB in der Web App.Wie bekomme ich die Werte des inneren Dokumentattributs in mongoDB?

Ich möchte wissen, wie Sie den Wert des inneren Dokuments Attribut eines Dokuments erhalten.

Können sagen, meine JSON ist wie,

{ "_id" : { "$oid" : "4ceb753a70fdf877ef5113ca"}, "Attrr1" : "value1", "Attr2": {"innerAttr1":"innerValue1", "innerAttr2":"innerValue2"}, "Attr3" : { "innerAttr3" : "innerValue3", "innerAttr4" : "innerValue4"} } 

Für die oben json, wie ich innerValue1 und beide innerValue1 & innerValue2 bekommen.

Ich habe das versucht, aber es funktioniert nicht für mich !!!

BasicDBObject innerQuery = new BasicDBObject(); 
field.put("Attr2.innerAttr1", 1); 

Alle Vorschläge wären dankbar !!!

Dank

Antwort

2

ich werde dich nicht bekommen. Sie müssen in einem Dokument Wert erhalten oder festlegen oder in die Sammlung einfügen?

Wie ich verstehe, verwenden Sie einen Treiber für Mongo Db in Java. Ich bin nicht in mongo Treiber für Java erfahren. Aber ich weiß ho dies in Fahrer oder C# zu tun:

in C# Mongo-Treiber für die Aktualisierung innere Eigenschaft in der Sammlung folgende Sie tun müssen:

var query = Query.Eq("_id", documentId); 
var update = Update.Set("Attr2.innerAttr1",1); 

MongoDb.Database.GetCollection("collectionName").Update(query, update); 

wenn Abfrage von oben Code retun ein Dokument - innerAttr1 Eigenschaft aus Die Attr2-Sammlung wird aktualisiert. Wenn ich diese Abfrage Rückkehr mehr als ein Dokument kennen und ich brauche mehr tha ein Dokument aktualisieren verwende ich einen solchen Code:

MongoDb.Database.GetCollection("collectionName").Update(query, update, UpdateFlag.Multi); 

Ich glaube, dass die gleiche Logik in Mongo Treiber für Java.

Hoffe diese Hilfe.

+0

Danke für Ihre Antwort. Der Java-Treiber unterstützt keine Punktnotation. Das ist das Problem für mich. Aber ich habe einen anderen Weg gefunden, es zu tun. Aber ich schätze deine Bemühungen für mich. –

0

Da die Antwort nicht geschrieben wurde und ich fand nur die Antwort, hier ist es

(BasicDBObject)(query.get("Attr2")).getString("InnerAttr1") 
where query = (BasicDBObject) cursor.next() 

Kredit auf eine andere Stelle auf Stackoverflow geht.

+0

Wenn Sie den Link zu dem anderen Beitrag auf SO haben, sollten Sie ihn wahrscheinlich in Ihre Antwort aufnehmen. – Jack

+0

Ich habe versucht, es zu finden, konnte aber nicht. Wenn ich es tue, werde ich es aufnehmen. – Dhruv

Verwandte Themen