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