2013-06-10 3 views
0

Il y a comme 5 opérateurs de mise à jour: inc $, renommage $, $ setOnInsert, ensemble de $, et $ unsetUtilisation d'Update MongoDB upsert

Lorsque vous effectuez une mise à jour avec l'option upsert définie sur true, quelle sera la valeur de un document nouvellement créé (en considérant qu'il n'existe pas, donc, upsert il), pour un champ avec cette requête de mise à jour:

{$inc: {age: 1}} 

ainsi, le document nouvellement inséré aura la valeur 1? puisqu'il n'existe pas avant. Ai-je raison? Si l'opérateur est $rename, quelle serait la valeur du champ, null? Ou le champ ne sera pas créé dans le cadre du nouveau document à insérer?

Mise à jour:

Si la requête de mise à jour est une mise à jour de changement de nom:

db.students.update({ _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' } }) 
+0

1. doc dit: « Si le champ n'existe pas, $ inc définit le champ du montant indiqué. » donc vous avez raison/je ne reçois pas la chose renommer, pouvez-vous expliquer plus en détail? – joschua011

+0

voir ma question mise à jour – xybrek

+0

il n'y a pas upsert pour les requêtes renommer? droite? – xybrek

Répondre

1

Je ne les étapes suivantes dans RockMongo, qui devrait répondre à votre question sur $ renomme:

  1. Dans une nouvelle db/collection, insérer un document { "a": 1}
  2. Mettez-le à jour avec "$ rename": {"b": "c"}
  3. Il est dit "1 lignes peuvent être affectées".
  4. Revenez à la collection, il n'y a qu'une seule donnée: {"a": 1} (_id omis). Alors oui, ça ne fait rien.

Vous pouvez juste essayer vous-même :)

0

De l'docs.

Lorsque vous renommez un seul champ et le nom de champ existant fait référence à un champ non existant, l'opérateur $rename ne fait rien. Lorsque vous renommez plusieurs champs et tous les anciens noms de champ en champs non existants, l'opérateur $rename ne fait rien.

Lorsque renommer plusieurs champs et certains, mais pas tous les anciens noms de champs se référer à des champs non-existants, l'opérateur $rename effectue les opérations suivantes:

  • renomme les champs qui existent pour les nouveaux noms de champs spécifiés .
  • Ignore les champs inexistants.