Atualizar uma matriz aninhada de um registro na coleção mongodb

Digamos que você queira atualizar dinamicamente um elemento de um array que pertence a uma determinada coleção. Então, basicamente você tem algum modelo que se parece com:

Collection.name = {
somestring
:'some name',
anArray
:[]
}

Lendo a documentação aqui:

http://docs.mongodb.org/manual/reference/method/db.collection.update/#update-an-element-by-position e ali: http://docs.mongodb.org/manual/reference/operator / update / posicional / ou aqui:

Você pode obter informações muito legais. Infelizmente, ao usar algumas bibliotecas como mongoose ou frameworks como meteorjs, você pode lutar com o fato de que tem um campo dinâmico para o índice de array e a notação de ponto falha. Então, em vez desta simples linha de código:

db.bios.update(
{ _id: 1 },
{ $set: { "contribs.1": "ALGOL 58" } }
)

Você acaba sem nada 🙂

Quem vem ao resgate, a criação do objeto!

A ideia é simplesmente criar o objeto setterpara atualizar a coleção. Portanto, em vez de escrever claramente, { "contribs.1": "ALGOL 58" }você preferirá escrever:

var setter = {};
setter
['contribs.1'] = 'ALGOL 58';
db
.bios.update(
{ _id: 1 },
{ $set: setter}
)

Assim, você pode reconectá-lo com o valor de alguns parâmetros:

var setter = {};
setter
['contribs'+req.index] = 'ALGOL 58';
db
.bios.update(
{ _id: 1 },
{ $set: setter}
)

E voilà funciona! Aproveitar !