2016-03-20 9 views
3

Ich bin neu in mongoDB. Ich habe einige Probleme beim Aktualisieren der Datensätze in der MongoDB-Sammlung.Element in verschachtelte Arrays in MongoDB einfügen

Wie Elemente in Array "likes" in den eingebetteten Rekord

ich hinzufügen habe eine eingebettete Sammlung wie:

{ 
 
     "_id" : "iL9hL2hLauoSimtkM", 
 
     "title" : "Some Topic", 
 
     "followers" : [ 
 
      "userID1", 
 
      "userID2", 
 
      "userID3" 
 
     ], 
 
     "comments" : [ 
 
      { 
 
       "comment" : "Yes Should be....", 
 
       "userId" : "a3123", 
 
       "likes" : [ 
 
          "userID1", 
 
          "userID2" 
 
         ] 
 
      }, 
 
      { 
 
       "comment" : "No Should not be....", 
 
       "userId" : "ahh21", 
 
       "likes" : [ 
 
          "userID1", 
 
          "userID2", 
 
          "userID3" 
 
         ] 
 
      } 
 
     ] 
 
    }

ich den Rekord als

aktualisieren mag

{ 
 
     "_id" : "iL9hL2hLauoSimtkM", 
 
     "title" : "Some Topic", 
 
     "followers" : [ 
 
      "userID1", 
 
      "userID2", 
 
      "userID3" 
 
     ], 
 
     "comments" : [ 
 
      { 
 
       "comment" : "Yes Should be....", 
 
       "userId" : "a3123", 
 
       "likes" : [ 
 
          "userID1", 
 
          "userID2", 
 
          "userID3" // How to write query to add this element. 
 
         ] 
 
      }, 
 
      { 
 
       "comment" : "No Should not be....", 
 
       "userId" : "ahh21", 
 
       "likes" : [ 
 
          "userID1", 
 
          "userID2", 
 
          "userID3" 
 
         ] 
 
      } 
 
     ] 
 
    }

Geben Sie die Abfrage an, um das im Kommentar angezeigte Element hinzuzufügen. Danke.

Antwort

8

zwei Möglichkeiten:

  1. Da Sie keine eindeutige Kennung für die Kommentare haben, ist der einzige Weg, um einen bestimmten Punkt der Kommentare Array zu aktualisieren ist, den Index, den Sie aktualisieren, um explizit angeben, dies wie:

    db.documents.update(
        { _id: "iL9hL2hLauoSimtkM"}, 
        { $push: { "comments.0.likes": "userID3" }} 
    ); 
    
  2. Wenn Sie eine eindeutige Kennung für die Kommentare hinzufügen, können Sie es suchen und den gefundenen Artikel aktualisieren, ohne mit dem Index besorgniserregend:

    db.documents.update(
        { _id: "iL9hL2hLauoSimtkM", "comments._id": "id1"}, 
        { $push: { "comments.$.likes": "userID3" }} 
    ); 
    
+1

Vielen Dank für die Wiederholung und die Abfrage funktioniert gut. –

+1

genial! Sauber und einfach –

+0

frage mich nur, ob es möglich war, mehrere Array-Elemente mit einem Update zu aktualisieren? Ich habe einen Fall, in dem es bis zu 50 Aktualisierungen pro Dokument geben kann. –

1

Sie können $addToSet versuchen, die nur Elemente zu einem Array addiert, wenn sie nicht bereits in der Menge vorhanden sein.

db.topics.update(
    { _id: "iL9hL2hLauoSimtkM" }, 
    { $addToSet: { "comments.0.likes": "userId3" } } 
) 
Verwandte Themen