2012-03-26 13 views
3

db.test.insert Suche ({_ ID: 1, Kommunikation: [{type: 'SMS'}]})mongodb: ein Array von Hashes

db.test.find() { " _id“: 1, "Kommunikation": [{ "type": "SMS"}]}

Ok, seine

db.test.find eingefügt ({ 'Communications: {type : 'sms'}}) {"_id": 1, "Kommunikation": [{"type": "sms"}]}

Ok, ich es, wenn seine genaue Übereinstimmung finden

db.test.update ({_ id: 1}, {Kommunikation: [{type: 'sms', call_id: 9878} ]}

Jetzt habe ich es so aktualisiert, dass der Hash im Array verschachtelt

besitzt zwei Tasten

.test.update ({_ ID: 1}, {Kommunikation: [{Typ: 'SMS' , call_id: 9878}]})

Aber ich kann es nicht finden bc der Hash ist nicht die genaue Übereinstimmung! NEIN!

db.test.find ({ 'Kommunikation': {type: 'sms'}}). Count() => 0

Also, wie kann ich eine Suche wie die wo möchte ich auf einen der Schlüssel in einem Hash in einem Array übereinstimmen?

+0

Siehe AdaTheDevs Antwort für die richtige Antwort (Punktnotation) – zeedre

Antwort

2

Wenn ich richtig verstanden habe (keine Garantien, die ich habe!), Dann denke ich, was Sie suchen, ist die Punktnotation.

db.test.find({'communications.type':'sms'}).count() 

Hier ist die reference on MongoDb.org mit allen Beispielen.

+0

Wow, kann nicht glauben, dass ich das verpasst habe. Danke AdaTheDev. – zeedre

+0

Schauen Sie sich auch den $ elemMatch-Operator an, der in den meisten Fällen der geeignetste Ansatz für die Elementfilterung ist. –

Verwandte Themen