Supposons que le schéma suivant:MongoDB: Upserting et documents sous
{
'_id' : 'star_wars',
'count' : 1234,
'spellings' : [
{ spelling: 'Star wars', total: 10},
{ spelling: 'Star Wars', total : 15},
{ spelling: 'sTaR WaRs', total : 5} ]
}
Je peux mettre à jour le compte et l'une des orthographes en faisant ceci:
db.movies.update(
{_id: "star_wars",
'spellings.spelling' : "Star Wars" },
{ $inc :
{ 'spellings.$.total' : 1,
'count' : 1 }}
)
Mais cette forme de mise à jour n » t travailler avec upsert. c'est-à-dire, si j'essaie de mettre à jour (avec upsert) avec un _id qui n'existe pas, ou avec une orthographe qui n'existe pas déjà, rien ne se passe.
Existe-t-il une solution qui me permet d'augmenter lors de la mise à jour ($ inc) d'un sous-document?
Merci!
Afficher la requête avec la 'upsert' qui ne fonctionne pas si nous pouvons vous aider. Si vous utilisez la requête ci-dessus avec l'option 'upsert', il n'y a pas de' nouvelle orthographe 'définie, donc finalement il n'en ajoutera pas. Il va juste mettre à jour les orthographes existantes – Schaliasos
J'ai essayé la requête ci-dessus, avec l'option upsert. Y a-t-il un autre moyen de l'écrire? Je veux fondamentalement mettre à jour 'count', et 'total' pour une orthographe spécifique (avec +1 chacun), mais avec upsert (c'est-à-dire qu'un document entier sera créé si _id ne correspond pas, ou un sous-document sera créé si _id est apparié mais l'orthographe spécifique n'est pas présente). –
duplication possible de [Upsert Array Elements correspondant aux critères dans un document MongoDB?] (Http://stackoverflow.com/questions/8871363/upsert-array-elements-matching-criteria-in-a-mongodb-document) – WiredPrairie