Suppression de l'élément _id des résultats de Pymongo
Je suis d'essayer de créer un service web à l'aide de MongoDB et Flacon (à l'aide de la pymongo pilote). Une requête à la base de données renvoie les documents avec le "_id" domaine inclus, bien sûr. Je ne veux pas envoyer au client, alors comment puis-je le supprimer?
Voici un Flacon de route:
@app.route('/theobjects')
def index():
objects = db.collection.find()
return str(json.dumps({'results': list(objects)},
default = json_util.default,
indent = 4))
Ce retourne:
{
"results": [
{
"whatever": {
"field1": "value",
"field2": "value",
},
"whatever2": {
"field3": "value"
},
...
"_id": {
"$oid": "..."
},
...
}
]}
Je pensais que c'était un dictionnaire et je pouvais juste supprimer l'élément avant de le retourner:
del objects['_id']
Mais qui renvoie une erreur TypeError:
TypeError: 'Cursor' object does not support item deletion
Donc ce n'est pas un dictionnaire, mais quelque chose que je dois effectuer une itération sur chaque résultat sous forme d'un dictionnaire. J'ai donc essayer de le faire avec ce code:
for object in objects:
del object['_id']
Chaque objet dictionnaire regarde la façon dont je tiens à maintenant, mais les objets curseur est vide. Donc j'essaie de créer un nouveau dictionnaire et après la suppression de _id de chaque, ajouter un nouveau dictionnaire Flacon sera de retour:
new_object = {}
for object in objects:
for key, item in objects.items():
if key == '_id':
del object['_id']
new_object.update(object)
Ce retourne un dictionnaire avec le premier niveau de touches et rien d'autre.
Donc c'est une sorte de standard imbriqués les dictionnaires de problème, mais je suis aussi choqué que MongoDB ne dispose pas d'un moyen facile de traiter avec cela.
La MongoDB documentation explique que vous pouvez exclure _id avec
{ _id : 0 }
Mais qui ne fait rien avec pymongo. Le Pymongo documentation explique que vous pouvez lister les champs que vous voulez en retour, mais "(“_id” sera toujours inclus)". Sérieusement? Il n'y a pas moyen de contourner cela? Est-il quelque chose de simple et stupide que je suis surplombant ici?
source d'informationauteur ddw
Vous devez vous connecter pour publier un commentaire.
À exclure la
_id
champ dans une requête de recherche dans pymongo, vous pouvez utiliser:La documentation est un peu missleading sur ce qu'il dit de la
_id
champ est toujours inclus. Mais vous pouvez l'exclure comme indiqué ci-dessus.Vous appelez
sur le curseur de l'objet!
L'objet curseur est à l'évidence un objet iterable sur le jeu de résultats et pas seul
le document que vous pouvez manipuler.
est probablement ce que vous voulez.
Afin que votre demande est complètement faux comme le montre le code suivant:
La réponse ci-dessus échoue si nous voulons domaines spécifiques, et encore ignorer _id. L'utilisation de la suite dans de tels cas: