#Adicionar o valor de uma propriedade na array (mongodb)

1 messages · Page 1 of 1 (latest)

tall spade
#

queria saber como posso pegar o valor de um campo do documento e adicionar ele em uma array (que seria outro campo), tentei dessa forma mas sem sucesso https://mongoplayground.net/p/81y-56grnb7

#

no caso seria pra adicionar o valor de name (world) na array words, a array teria que ser atualizada pra ['hello', 'world']

coral sequoia
#

Você pode usar o operador $push do update. O operador $push adiciona um valor ao final de uma array existente.

#
db.collection.update(
   <query>,
   { $push: { <field>: <value> } }
)
#

No seu caso, para adicionar o valor de "name" na array "words", você pode fazer o seguinte:

db.collection.update(
   {}, // seleciona todos os documentos da coleção
   { $push: { words: "$name" } }
)
#

Isso irá adicionar o valor de "name" em todos os documentos da coleção. Se você quiser atualizar apenas um documento específico, basta especificar o critério de busca na query.

#

Exemplo:

db.collection.update(
   { _id: ObjectId("5f9d80d25e7da9fad6c7e7f0") }, // seleciona o documento com o ID especificado
   { $push: { words: "$name" } }
)
tall spade
#

ele seta literalmente "$name" na array e não o valor do campo name

#

olha ali no link que mandei

#

roda o exemplo pra tu ver, no mongo playground

coral sequoia
#

Você pode fazer o seguinte:

   {}, // seleciona todos os documentos da coleção
   { $push: { words: { $each: [{ $eval: "$$name" }] } } }
)
#

Isso irá adicionar o valor de "name" em todos os documentos da coleção. Se você quiser atualizar apenas um documento específico, basta especificar o critério de busca na query.

#

Ex:

   { _id: ObjectId("5f9d80d25e7da9fad6c7e7f0") }, // seleciona o documento com o ID especificado
   { $push: { words: { $each: [{ $eval: "$$name" }] } } }
)
coral sequoia
#

Creio que seja problema da plataforma.

tall spade
#

pior que não é, o mongodb que não tem um recurso pra isso
pesquisei em tudo quanto é lugar e pelo que vi tinham algumas pessoas com o mesmo problema

#

mas encontrei uma solução em um tópico

#
[{
  $set: {
    words: { $concatArrays: ['$words', ['$name']] }
  }
}]
#

é meio gambiarra se parar pra pensar que esse concatArrays é pra juntar duas arrays, e eu quero juntar uma string numa array kkk

#

mas não tem outra solução eu acho

#

enfim, valeu ai por tentar ajudar he4rt

uncut kettle
#

não é uma gambiarra, na própria documentação do mongodb, solicita essa utilização