Ce que je fais mal avec $et $inc en mise à jour
Je suis en train d'essayer ceci à la mongodb console:
db.foobar.update(
{ name: "Foobar" },
{
$set : { foo: { bar: 'bar' },
$inc: { 'foo.count': 1 }
}
}, true)
Il revient avec "ok", mais db.foobar.find()
, renvoie un vide record. Je suis en train de upsert
un document, de sorte qu'il ressemble le:
name: Foobar
foo: {
bar: 'bar'
count: 1
}
Si le doc n'existe pas en créer un avec un compte de 1. Sinon, il suffit d'augmenter le nombre de. Pourquoi n'est-il pas au-dessus de travail?
OriginalL'auteur Christian Fazzini | 2012-05-27
Vous devez vous connecter pour publier un commentaire.
Il me semble que votre code est en fait en essayant de mettre le $inc champ du document plutôt que d'utiliser le $inc modificateur sur le foo.champ nombre. Cela pourrait être ce que vous voulez:
Espère que cette aide.
db.foobar.update( { name: "Foobar" }, { $set: { foo: { bar: 'bar' } }, $inc: { 'foo.count': 1 } }, true)
Il semble paramètre une chaîne de le faire fonctionner. Mais je me demande pourquoiJe n'avais pas remarqué que! Le message d'erreur fourni par le shell est "contradictoire les mods dans la mise à jour". Pour moi, cela suggère que $fonctionne sur la " foo " sous-document dans son ensemble, par conséquent, vous ne pouvez pas utiliser $inc sur 'foo' ou une de ses propriétés, telles que " foo.nombre'. Je conjecture que l'utilisation de $définie sur 'foo.bar' et $inc sur " foo.count' fonctionne parce que les deux modificateurs de la cible disjoints parties du document.
OriginalL'auteur idrarig
Dans l'extrait de code youprovided, il vous manque une accolade fermante après l' $de l'objet du jeu. Mais c'est une question de côté.
Je ne crois pas que vous pouvez définir et incrémenter le même sous-document dans une transaction.
Depuis que le comte est un membre en vertu de toto, sur un upsert, il n'existe pas encore. L'erreur que j'obtiens quand j'essaie suivantes:
est "conflit des mods dans la mise à jour".
Peut-être que vous pouvez le modèle de cette façon:
ou si vous préférez:
OriginalL'auteur Ray
Donc je suis en train d'essayer:
Cette mise à jour du
score
, et l'ajoute à l'objet s'il n'existe pas, cependant, elle semble changer tous les objetsname
s doc.nom (j'.e "nom" dans ce cas).Je n'ai pas sur si le doc n'existe pas encore
OriginalL'auteur amlwwalker