Definição
$pushThe
$pushoperator appends a specified value to an array.
Compatibilidade
Você pode utilizar o $push para implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
The $push operator has the form:
{ $push: { <field1>: <value1>, ... } }
Para especificar um <field> em um documento incorporado ou em uma array, use a notação de ponto.
Comportamento
A partir do MongoDB 5.0, os operadores de atualização processam campos de documento com nomes baseados em cadeia de caracteres em ordem lexicográfica. Os campos com nomes numéricos são processados em ordem numérica. Consulte Atualizar Comportamento de Operadores para detalhes.
If the field is absent in the document to update, $push adds the array field with the value as its element.
Se o campo não for uma array, a operação falhará.
If the value is an array, $push appends the whole array as a single element. To add each element of the value separately, use the $each modifier with $push. For an example, see Append Multiple Values to an Array. For a list of modifiers available for $push, see Modifiers.
Starting in MongoDB 5.0, mongod no longer raises an error when you use an update operator like $push with an empty operand expression ( { } ). An empty update results in no changes and no oplog entry is created (meaning that the operation is a no-op).
Modifiers
You can use the $push operator with the following modifiers:
Modifier | Descrição |
|---|---|
Anexa vários valores ao campo de array. | |
Limita o número de elementos de array. Requer o uso do modificador | |
Ordena elementos da array. Requer o uso do modificador | |
When used with modifiers, the $push operator has the form:
{ $push: { <field1>: { <modifier1>: <value1>, ... }, ... } }
The processing of the $push operation with modifiers occur in the following order, regardless of the order in which the modifiers appear:
Atualize a array para adicionar elementos na posição correta.
Aplicar ordenação, se especificado.
Divida a array, se especificado.
Armazene a array.
Exemplos
Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar este conjunto de dados em sua implantação do MongoDB autogerenciado, consulte Carregar o conjunto de dados de amostra. Se você fez alguma modificação nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
Anexar um valor a uma array
The following example uses the $push operator to append "Classic" to the genres array in the matching movie document:
db.movies.updateOne( { title: "The Dark Knight" }, { $push: { genres: "Classic" } } )
A operação retorna o seguinte resultado:
{ acknowledged: true, insertedId: null, matchedCount: 1, modifiedCount: 1, upsertedCount: 0 }
Anexar um valor a arrays em vários documentos
The following example uses the $push operator to append "Acclaimed" to the genres array in all matching movie documents:
db.movies.updateMany( { "imdb.rating": { $gt: 9 } }, { $push: { genres: "Acclaimed" } } )
A operação retorna o seguinte resultado:
{ acknowledged: true, insertedId: null, matchedCount: '...', modifiedCount: '...', upsertedCount: 0 }
Anexar vários valores a uma array
Use $push with the $each modifier to append multiple values to the array field.
db.movies.updateOne( { title: "The Dark Knight" }, { $push: { genres: { $each: [ "Modern Classic", "Award-Winning" ] } } } )
A operação retorna o seguinte resultado:
{ acknowledged: true, insertedId: null, matchedCount: 1, modifiedCount: 1, upsertedCount: 0 }
Use $push o operador com vários modificadores
Adicione o seguinte documento à coleção students:
db.students.insertOne( { "_id" : 5, "quizzes" : [ { "wk": 1, "score" : 10 }, { "wk": 2, "score" : 8 }, { "wk": 3, "score" : 5 }, { "wk": 4, "score" : 6 } ] } )
The following $push operation uses:
o modificador
$eachpara adicionar vários documentos à arrayquizzes,o modificador
$sortpara ordenar todos os elementos da arrayquizzesmodificada pelo camposcoreem ordem decrescente eo modificador
$slicepara manter apenas os três primeiros elementos ordenados da arrayquizzes.
db.students.updateOne( { _id: 5 }, { $push: { quizzes: { $each: [ { wk: 5, score: 8 }, { wk: 6, score: 7 }, { wk: 7, score: 6 } ], $sort: { score: -1 }, $slice: 3 } } } )
Após a operação, somente os três testes de pontuação mais alta estão na array:
{ "_id" : 5, "quizzes" : [ { "wk" : 1, "score" : 10 }, { "wk" : 2, "score" : 8 }, { "wk" : 5, "score" : 8 } ] }