Sto provando questo al mongodb console:
db.foobar.update(
{ name: "Foobar" },
{
$set : { foo: { bar: 'bar' },
$inc: { 'foo.count': 1 }
}
}, true)
Si ritorna con "ok", ma db.foobar.find()
, restituisce un set di record vuoto. Sto cercando di upsert
un documento, così sembra che il:
name: Foobar
foo: {
bar: 'bar'
count: 1
}
Se il documento non esiste quindi creare uno con un conteggio di 1. In caso contrario, basta aumentare il numero. Perché non funziona al di sopra?
Che funziona. Ma perché non funziona: 'db.foobar.update ({nome:" Foobar "}, {$ set: {pippo: {bar: 'bar'}}, $ inc: {'foo.count': 1 }}, vero) 'Sembra che l'impostazione in una stringa lo faccia funzionare. Ma mi chiedo perché non ho notato questo –
! Il messaggio di errore fornito dalla shell è 'avere mod in conflitto in aggiornamento'. Secondo me questo suggerisce che $ set operi sul documento secondario "pippo" nel suo insieme, quindi non puoi usare $ inc su "pippo" o su nessuna delle sue proprietà, come "foo.count". Suppongo che usare $ impostato su "foo.bar" e $ inc su "foo.count" funzioni perché i due modificatori puntano a parti disgiunte del documento. – idrarig