MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $push

W MongoDB możesz użyć $push operatora, aby dodać wartość do tablicy.

Możesz użyć różnych modyfikatorów, aby określić pozycję wartości w tablicy, kolejność elementów w tablicy, dodać wiele wartości itp.

Przykład

Załóżmy, że mamy kolekcję o nazwie products z następującymi dokumentami:

db.products.find()

Wynik:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L" ] }

I powiedzmy, że chcemy dodać wartość do tablicy w dokumencie 3.

Możemy użyć $push w połączeniu z update() aby dołączyć wartość:

db.products.update(
   { _id: 3 },
   { $push: { sizes: "XL" } }
)

Wyjście:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Spójrzmy ponownie na kolekcję, aby zweryfikować zmianę:

db.products.find()

Wynik:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L", "XL" ] }

Wstaw wartość w określonej pozycji

Możesz użyć $each i $position modyfikatory określające, gdzie wartość powinna być wstawiona do tablicy.

Na przykład możemy użyć wartości 0 aby wstawić go na początku tablicy.

Przykład:

db.products.update(
   { _id: 3 },
   { 
     $push: { 
        sizes: {
           $each: [ "S" ],
           $position: 0
        }
      } 
    }
)

Wyjście:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

$each modyfikator dołącza wiele wartości do pola tablicy. W tym przypadku jednak wstawiliśmy tylko jedną wartość do tablicy, aby użyć $position modyfikator, musi pojawić się z $each modyfikator.

Sprawdźmy jeszcze raz kolekcję:

db.products.find()

Wynik:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Dołącz i sortuj

Załóżmy, że mamy kolekcję z następującymi dokumentami:

db.players.find()

Wynik:

{ "_id" : 1, "scores" : [ 1, 5, 3 ] }
{ "_id" : 2, "scores" : [ 8, 17, 18 ] }
{ "_id" : 3, "scores" : [ 15, 11, 8 ] }

I załóżmy, że chcemy dołączyć jakieś wartości do tablicy w dokumencie 3, ale chcemy również posortować tablicę w porządku rosnącym po dodaniu wartości.

Możemy to zrobić:

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 5, 12 ],
           $sort: 1
        }
      } 
    }
)

Wyjście:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Teraz, gdy przeglądamy kolekcję, widzimy, że trzeci dokument został odpowiednio zmodyfikowany.

db.players.find()

Wynik:

{ "_id" : 1, "scores" : [ 1, 5, 3 ] }
{ "_id" : 2, "scores" : [ 8, 17, 18 ] }
{ "_id" : 3, "scores" : [ 5, 8, 11, 12, 15 ] }

Aby posortować je w kolejności malejącej, użyj $sort: -1 .

Pokrój tablicę

Możesz użyć $slice modyfikator, aby ograniczyć liczbę elementów w tablicy.

Na przykład dodajmy kolejną wartość do tablicy, a następnie podzielmy tablicę na określoną liczbę elementów.

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 3 ],
           $slice: 3
        }
      } 
    }
)

Wyjście:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Teraz ponownie sprawdźmy kolekcję:

db.players.find()

Wynik:

{ "_id" : 1, "scores" : [ 1, 5, 3 ] }
{ "_id" : 2, "scores" : [ 8, 17, 18 ] }
{ "_id" : 3, "scores" : [ 5, 8, 11 ] }

W tym przypadku tablica została podzielona, ​​ale dodana przez nas wartość nie znalazła się nawet w końcowej tablicy. Dzieje się tak, ponieważ wartość została dołączona do tablicy i nie użyliśmy $sort operacji, więc wartość pozostała na końcu tablicy, zanim tablica została podzielona na pierwsze trzy elementy.

I znowu, tyle że tym razem z $sort modyfikator.

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 3 ],
           $sort: 1,
           $slice: 3
        }
      } 
    }
)

Wyjście:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Sprawdź kolekcję:

db.players.find()

Wynik:

{ "_id" : 1, "scores" : [ 1, 5, 3 ] }
{ "_id" : 2, "scores" : [ 8, 17, 18 ] }
{ "_id" : 3, "scores" : [ 3, 5, 8 ] }

Dołącz wartość tylko wtedy, gdy nie istnieje

Jeśli chcesz, aby wartość została dołączona tylko wtedy, gdy jeszcze nie istnieje w tablicy, rozważ użycie $addToSet operator.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zapytanie po wypełnieniu w Mongoose

  2. ScaleGrid ogłasza usługi hostingowe MongoDB w Kanadzie

  3. jak skonstruować indeks złożony w mongodb

  4. Dopełnienie w SQL

  5. Meteor:różnica między nazwami kolekcji, zmiennych, publikacji i subskrypcji?