2016-05-11 5 views
4

Je suis en train de travailler avec shell mongo et je rencontre des difficultés à stocker la valeur à l'intérieur de mongo shellvariables non définies dans shell mongo

quand je trouve un utilisateur dans les utilisateurs du document, je stocke dans la variable doc

> var doc = db.users.find({"username":"anil"}); 

lorsque je tape doc dans le shell mongo je vois l'objet JSON

> doc 
{ "_id" : ObjectId("57325aaa48d9231b11e5cb81"), "username" : "anil", "email" : "[email protected]" } 

Cependant, lorsque je tape doc à nouveau, je ne vois rien. son disparu .. qu'est-ce que je fais mal ici?

> doc 
> 

C'est peut-être quelque chose de simple mais je ne comprends pas. Quelqu'un peut-il signaler ce que je fais mal?

Répondre

3

lorsque vous ouvrez un shell mongo il tente de trouver un serveur mongod et se connecte pour tester par défaut. Lorsque vous affectez une variable dans mongo shell à un document dans mongod, elle extrait le document de la base de données. Pour retrouver le même résultat, vous devez vous reconnecter à la base de données (cela signifie que vous devez taper var doc = db.users. find ({"nom d'utilisateur": "anil"}); Contrairement au scénario où vous définissez var doc = 4 dans shell et en tapant doc retournera 4 à chaque fois.

Si vous voulez arrêter la transmission au début et faire un peu de traitement, vous devez ajouter null après comme

var doc = db.users.find ({ « nom d'utilisateur »: « anil »}); nul; // faire votre travail sur doc

un ex.

enter image description here

+0

dans ce cas quand je fais var doc = db.users.find ({ "nom d'utilisateur": "anil"}); null; doc ['nom d'utilisateur'] = "xyz", puis tapez doc. Est-ce que la valeur de nom d'utilisateur qui était "anil" a été remplacée par "xyz"? mais quand j'essaye ça, ça ne marche pas. – user641887

+0

s'il vous plaît voir mes commentaires ajoutés ci-dessus. – AMITAVA

+0

Je suppose que j'ai mal interprété votre exigence. Si vous voulez mettre à jour la table d'origine dans le mongod avec le document mis à jour, vous devez ajouter une étape supplémentaire. J'ai mis à jour mon annexe précédente. N'hésitez pas à me faire savoir si ce n'est pas votre condition. – AMITAVA

2

Cela parce que find renvoie cursor et vous ne pouvez consommer toute la valeur qu'une seule fois. Ici parce que vous filtrez votre document basé sur la valeur _id, dans le curseur de retour vous avez seulement un document qui est consommé la première fois que vous temps. Si vous avez besoin pour itérer votre résultat plusieurs fois, vous devrez retourner un tableau contenant tous les documents du curseur à l'aide toArray, mais dans votre cas ce que vous avez besoin est findOne