Не удается получить встроенный документ внутри dict с помощью Eve

Я создаю API только для чтения поверх существующей структуры MongoDB и не могу получить встроенный документ для отображения в моем основном вызове.

Образец рассматриваемого документа (отредактирован).

{
  "_id": ObjectId("54a31721372a3b0f00000017"),
  "contentType": "document",
  "created": ISODate("2014-12-30T21:20:33.408Z"),
  "dcsId": "e14.0483",
. . .
  ,
   "metadata": {
     "amountTotal": 315.05,
     "amountNeto": 252.04,
     "partner": ObjectId("53bd4d851899424c0700005e")
  },
. . .

партнер — это то, что я пытаюсь встроить в вызов документа...

моя схема для документа (используется как ura)...

docsSchema = {
    'dcsId': {
        'type': 'string',
        'required': True,
        'unique': True
    },
    'modified': {
        'type': 'datetime'
    },
    'created': {
        'type': 'datetime'
    },
    'downloadUrl': {
        'type': 'string'
    },
    'metadata': {
        'partner': {
            'type': 'objectid',
            'data_relation': {
                'resource': 'partners',
                'field': '_id',
                'embeddable': True

            }
        },
        'documentType': {'type': 'string'},
        'amountTotal': {'type': 'float'},
        'amountNeto': {"type": "float"}

    }
}

Моя схема для партнера

partnersSchema = {
    "name": {"type": "string"}
}

И определения ресурсов для обоих.....

from schemas import coreSchemas

ura = {
    'datasource': {
        'source': 'documents',
        'filter': {'metadata.documentType': 'URA'},
        'default_sort': [('_id', 2)],
        'projection': {
            "metadata.amountNeto": 1,
            "metadata.amountTotal": 1,
            "metadata.partner": 1,
            "created": 1,
            "modified": 1,
            "dcsId": 1},
        'embedding': True
    },
    'cache_control': 'max-age=10,must-revalidate',
    'cache_expires': 10,
    'resource_methods': ['GET'],
    'scheme': coreSchemas.docsSchema,
    'url': 'ura',
    "embedded_fields": {"metadata.partner"}
}

partners = {
    'datasource': {
        'source': 'partners',
        'filter': {'deleted': {'$ne': True}},
        # 'projection': {'metadata': 1, 'modified':1,'created':1, 'drive.webContentLink' : 1 , 'deleted': {'$ne':True}}
    },
    'cache_control': 'max-age=10,must-revalidate',
    'cache_expires': 10,
    'resource_methods': ['GET'],
    'scheme': coreSchemas.partnersSchema,
    'url': 'partners',
    "embedding": True
}

Мой вызов конечной точки "ura" дает мне только идентификатор партнера (без встраивания)...

Что мне здесь не хватает?


person mgmonteleone    schedule 02.01.2015    source источник


Ответы (1)


Встраивание подполей (слов) в настоящее время не поддерживается. Из параграфа Ограничения в Внедрение документа:

На данный момент поддерживается встраивание документов по ссылкам, расположенным в любых вложенных документах (вложенных словарях и списках). Например, запрос /invoices?/embedded={"user.friends":1} вернет документ со встроенным пользователем и всеми его друзьями, но только если пользователь является вложенным документом, а друзья — списком ссылок< /strong> (это может быть список словарей, вложенный словарь и т. д.). Мы не поддерживаем встраивание нескольких слоев.

person Nicola Iarocci    schedule 03.01.2015
comment
Спасибо за быстрый ответ! Очень хотелось бы увидеть эту возможность в следующих версиях.... - person mgmonteleone; 15.01.2015