2017-05-11 3 views
0

Im Folgenden wird zurückgegeben mein Code nach dem commant db.slist.findOne()Dokument zu einem eingebetteten Array nach bedingter Suche Hinzufügen

Wie füge ich eine ID an das Array mit „iname“ als „Soap“? Ich muss eine Abfrage schreiben, die alle "itemlist" -Array in der Sammlung sucht und wenn das Dokument in einem eingebetteten Dokument "iname" als "Soap" hat, sollte eine neue Zeile über "iname:" Soap "eingefügt werden als „itemID“ und ein Artikel-ID selbst einstellen. Kann mir jemand helfen, die richtige Abfrage für ihn zu finden?

auch dies wie eine schwierige Frage scheint, lassen Sie es mich wissen, wenn Sie schwer fallen, die Frage zu verstehen.

{ 
    "_id" : ObjectId("5914213e9f75f9119575c1d7"), 
    "name" : "Athif", 
    "age" : 23, 
    "address" : { 
     "house" : "675/38B", 
     "street" : "West Hill", 
     "city" : "Chungam", 
     "pincode" : 676507 
    }, 
    "itemlist" : [ 
     { 
      "iname" : "Soap", 
      "quantity" : 2, 
      "price" : 10, 
      "rate" : 20 
     }, 
     { 
      "iname" : "helmet", 
      "quantity" : 1, 
      "price" : 500, 
      "rate" : 500 
     }, 
     { 
      "iname" : "Table", 
      "quantity" : 2, 
      "price" : 5000, 
      "rate" : 10000 
     } 
    ] 
} 
+0

Es kann mehrere Objekte mit Iname als "Soap" in Artikelliste Array? – Shrabanee

+1

Siehe, wenn der Link http://StackOverflow.com/documentation/mongodb/1683/crud-operation/22368/update-of-beddeded-documents#t=201705111314015170307. Dies wird Ihnen helfen zu verstehen, was Sie tun können. – Shrabanee

Antwort

1

Array-Elemente für die Aktualisierung von MongoDB $ Positions Bediener zur Verfügung stellt. wenn Sie Abfrage anwenden die Positions Betreiber alle Array-Elemente finden $ hält die Position, dass eingebettetes Dokument, das im Update-Vorgang geändert werden kann. Also, hier gehst du! (Angenommen, Ihre Sammlung Name ist Demo)

+0

Danke, das hat funktioniert. Eine zusätzliche Frage, wenn es Ihnen nichts ausmacht, aktualisiert der obige Code das Dokument nur für dieses bestimmte Objekt. Wenn ich ein anderes Objekt, eine andere Person mit einer Einkaufsliste habe und er "Soap" in seiner "Artikelliste" hat, kann ich die "itemId" zu beiden "Soap" -Dokumenten gleichzeitig mit einem einzigen Befehl hinzufügen? Oder muss ich das separat für jede Person mit "Soap" in ihrer Artikelliste tun? –

+0

Habe es behoben. Benutzte updateMany anstelle von update. Danke :) –

+0

Willkommen! @HishamMubarak sollten Sie bedenken, wenn die 'itemlist' mehr Dokumente mit' iname' soap hat, wird es update auf das erste passende Dokument anwenden, das sonst unberührt bleibt. – nurulnabi

Verwandte Themen