MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

usando chave como valor no Mongoengine


Você já pensou em usar o PyMongo diretamente em vez de usar o Mongoengine? O Mongoengine foi projetado para declarar e validar um esquema para seus documentos e fornece muitas ferramentas e conveniências para isso. Se seus documentos vão variar, não tenho certeza se o Mongoengine é a escolha certa para você.

Se, no entanto, você tiver alguns campos em comum em todos os documentos e, em seguida, cada documento tiver algum conjunto de campos específicos para si mesmo, você poderá usar o DictField do Mongoengine . A desvantagem disso é que as chaves não serão de "nível superior", por exemplo:
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()

Resultados em um documento MongoDB como:
{ _id: ObjectId(...),
  _types: ["UserThings"],
  _cls: "UserThings",
  username: "dcrosta",
  things: {
    foo: "bar",
    baz: "quack"
  }
}

Editar: Também devo observar que há trabalho em andamento no ramo de desenvolvimento do Mongoengine para documentos "dinâmicos", onde os atributos nas instâncias do documento Python serão salvos quando o modelo for salvo. Consulte https://github.com/hmarr/mongoengine/pull/112 para detalhes e história.