Estoy tratando esto en el mongodb console:
db.foobar.update(
{ name: "Foobar" },
{
$set : { foo: { bar: 'bar' },
$inc: { 'foo.count': 1 }
}
}, true)
Vuelve con "OK", pero db.foobar.find()
, devuelve un conjunto de registros vacío. Estoy tratando de upsert
un documento, por lo que parece el:
name: Foobar
foo: {
bar: 'bar'
count: 1
}
Si no existe el documento a continuación, crear una con un conteo de 1. De lo contrario, simplemente aumentar la cuenta. ¿Por qué no está arriba trabajando?
Eso funciona. Pero por qué esto no funciona: 'db.foobar.update ({name:" Foobar "}, {$ set: {foo: {bar: 'bar'}}, $ inc: {'foo.count': 1 }}, true) 'Parece que establecer una cadena lo hará funcionar. Pero me pregunto por qué –
¡No me había dado cuenta de eso! El mensaje de error proporcionado por el shell es 'tiene modificaciones conflictivas en la actualización'. Para mí, esto sugiere que $ set opera en el subdocumento 'foo' como un todo, por lo tanto, no puede usar $ inc en 'foo' o cualquiera de sus propiedades, como 'foo.count'. Conjeturo que usar $ set en 'foo.bar' y $ inc en 'foo.count' funciona porque los dos modificadores apuntan a partes disjuntas del documento. – idrarig