Ho un documento con un array interno, in questo modo:
"userTags" : [
"foo",
"foo",
"foo",
"foo",
"moo",
"bar"
]
Se effettuo db.products.update({criteriaToGetDocument}, {$push: {userTags: "foo"}}}
posso inserire correttamente un'altra istanza foo
nella matrice.
Tuttavia, se lo faccio db.products.update({criteriaToGetDocument}, {$pull: {userTags: "foo"}}}
allora rimuove tutti istanze di foo
dalla matrice, lasciandomi con:
"userTags" : [
"moo",
"bar"
]
Così non va per niente, voglio solo tirare un elemento da la matrice piuttosto che tutti. Come posso modificare il comando in modo che venga rimosso solo uno foo
? Esiste una sorta di metodo $pullOnce
che può funzionare qui?
Questo è ... molto fastidioso. Suppongo che un altro modo sarebbe cambiare la mia progettazione dei dati in modo che 'userTags' sia un oggetto con' {tag: (numberofinstances) 'e semplicemente aumenti/diminuisca questo numero ogni volta che sia necessario, ma preferirei non farlo mentre fa casino con il sacco di altre cose! – Jascination
Sono d'accordo con te. Sembra che questa funzione sia davvero utile e senza la documentazione di lettura si può interpretare male l'idea di $ pull. Ma le persone in mongo stanno facendo un buon lavoro aumentando le caratteristiche di mongo durante ogni rilascio. Quindi credo che un giorno vedrai questo fuori dagli schemi. Post scriptum - votare per la funzione nella JIRA. –
Nice edit. Puoi suggerire qualsiasi comando che controlli il tag esistente quindi controlla se è maggiore di uno? O dovrei scoprire se il 'tag: {$ esiste: true}' in una ricerca quindi fare un aggiornamento con il nuovo numero di tag? – Jascination