Я пытаюсь построить webapp с флягой и mongoengine, но застрял в следующей проблеме.Запрос сложной схемы JSON с mongoengine
Предположим, что существует документ с JSON структуры, как это:
"user": {
"value": "username",
[...]
},
"entities": [
{
"key": "foo",
"value": "123"
},
"key": "bar",
"value": "456"
},
[...]
]
1) Сначала я хочу получить весь документ от пользователя "имя пользователя", я попробовал:
userdata = models.User.objects(user__match = {"value": "username"})
но это возвращает пустой документ. Я также пытался что-то вроде этого:
userdata = models.User.objects(user__contains = "username")
Но потом я получил: AttributeError: 'str' object has no attribute 'get'
Я читал документы, и прокрался вокруг, но ничего не нашел полезное.
2) Когда документ получил (наконец-то) из БД, мне нужно, чтобы поймать всех value
сек от entities
для отображения, что в шаблоне jinja2, но понятия не имеют, как это удалось.
Это (часть) модель:
class Username(EmbeddedDocument):
value = StringField(
primary_key = True,
unique = True)
created = DateTimeField(
require = True,
default = datetime.utcnow())
class Entities(EmbeddedDocument):
etype = StringField(
require = True,
choices = ENTITYTYPES)
key = StringField(
require = True,
choices = ENTITIES)
value = StringField(
require = True)
modiefied = DateTimeField(
require = True,
default = datetime.utcnow())
class User(Document):
user = EmbeddedDocumentField(
Username)
entities = ListField(
GenericEmbeddedDocumentField(Entities))
Как уже упоминалось из @Paul я попробовал некоторые запросы:
userdata = models.User.objects.get(entities={"key": "foo"})
Результат: AttributeError: 'dict' object has no attribute 'to_mongo'
userdata = models.User.objects(entities={"key": "foo"})
Результат: AttributeError: 'dict' object has no attribute 'to_mongo'
userdata = models.User.objects(user__entities = {"key": "foo"})
Результат: mongoengine.errors.InvalidQueryError: Cannot resolve field "user"
userdata = models.User.objects.get(entities={"key": "foo"})
Результат: AttributeError: 'dict' object has no attribute 'to_mongo'
userdata = models.User.objects(__raw__={"key": "foo"})
Результат: []
userdata = models.User.objects(key='foo')
Результат: mongoengine.errors.InvalidQueryError: Cannot resolve field "key"
напишите свой код пользователя и источник JSON в верхней части вашего вопроса. –
добавлена модель, вопросы и результаты – ic14