MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

en utilisant la clé comme valeur dans Mongoengine

Avez-vous envisagé d'utiliser PyMongo directement au lieu d'utiliser Mongoengine ? Mongoengine est conçu pour déclarer et valider un schéma pour vos documents, et fournit de nombreux outils et commodités autour de cela. Si vos documents vont varier, je ne suis pas sûr que Mongoengine soit le bon choix pour vous.

Si, toutefois, vous avez des champs en commun dans tous les documents, et que chaque document a un ensemble de champs spécifiques à lui-même, vous pouvez utiliser le DictField de Mongoengine . L'inconvénient est que les clés ne seront pas "de niveau supérieur", par exemple :

class UserThings(Document):
    # you can look this document up by username
    username = StringField()

    # you can store whatever you want here
    things = DictField()

dcrosta_things = UserThings(username='dcrosta')
dcrosta_things.things['foo'] = 'bar'
dcrosta_things.things['bad'] = 'quack'
dcrosta_things.save()

Résultats dans un document MongoDB comme :

{ _id: ObjectId(...),
  _types: ["UserThings"],
  _cls: "UserThings",
  username: "dcrosta",
  things: {
    foo: "bar",
    baz: "quack"
  }
}

Modifier : Je dois également noter qu'il y a des travaux en cours sur la branche de développement de Mongoengine pour les documents "dynamiques", où les attributs sur les instances de document Python seront enregistrés lors de l'enregistrement du modèle. Voir https://github.com/hmarr/mongoengine/pull/112 pour les détails et l'historique.