sql >> Base de Datos >  >> NoSQL >> MongoDB

usando la clave como valor en Mongoengine

¿Ha considerado usar PyMongo directamente en lugar de usar Mongoengine? Mongoengine está diseñado para declarar y validar un esquema para sus documentos y proporciona muchas herramientas y conveniencias al respecto. Si sus documentos van a variar, no estoy seguro de que Mongoengine sea la opción adecuada para usted.

Sin embargo, si tiene algunos campos en común en todos los documentos, y luego cada documento tiene un conjunto de campos específicos, puede usar el DictField de Mongoengine. . La desventaja de esto es que las claves no serán de "nivel superior", por ejemplo:

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()

Da como resultado un documento MongoDB como:

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

Editar: También debo señalar que hay trabajo en progreso en la rama de desarrollo de Mongoengine para documentos "dinámicos", donde los atributos en las instancias de documentos de Python se guardarán cuando se guarde el modelo. Consulte https://github.com/hmarr/mongoengine/pull/112 para detalles e historial.