pymongo find() vs mongodb find(), pymongo find() donne le moins de données sur le document
J'ai un partner collection
et je suis en utilisant pymongo
pour récupérer les données
Quand j'ai une requête à la collection avec MongoDB, je vois le résultat suivant
db.partner.find({'unique_key': 'c89dbe313932008febde61cdd2a071a1d'},{})
{ "_id" : ObjectId("4eb463cb158acb554e8c9c11"), "unique_key" : "c89dbe313932008febde61cdd2a071a1d", "name" : "ABC", "primary_key" : 12 }
Mais quand j'ai une requête via pymongo, voici ce que je fais
for document in collection.find(find, criteria):
print document
where find = {'unique_key': 'c89dbe313932008febde61cdd2a071a1d'} and
criteria = {}
Ici a ce que je vois dans le résultat:
{u'_id': ObjectId('4eb463cb158acb554e8c9c11')}
et je ne suis pas nom et primary_key en conséquence, suis-je raté quelque chose?
Merci
OriginalL'auteur daydreamer | 2011-11-14
Vous devez vous connecter pour publier un commentaire.
Il semble que lorsque vous transmettez un dictionnaire vide (votre
criteria
variable) en tant que second paramètre, il signifie que vous voulez pas de champs retournés (à l'exception de_id
qui est toujours renvoyée). Le deuxième paramètre pourfind()
définit les champs que vous souhaitez. Essayez de définircriteria=None
ou de ne pas passercriteria
à tous.Lien à la pymongo document pour
find()
.OriginalL'auteur Lycha
Cela est dû à la façon dont les mongodb shell interprète
{}
comme un champ sélecteur de rapport pymongo interprète un dictionnaire vide. En essence, le shell ignore l'objet vide comme un sélecteur de champ, tandis que pymongo est l'interprétant comme un "retour rien (sauf la valeur par défaut de_id
)".Vous n'avez pas besoin de spécifier un champ sélecteur lors de l'utilisation de pymongo ou mongodb shell (vous pouvez laisser le champ vide). Ainsi, cette déclaration dans le shell:
est équivalent à:
(cette instruction de travail dans la coquille et pymongo)
OriginalL'auteur dcrosta