Извлечение метаданных в RavenDB - PullRequest
3 голосов
/ 23 октября 2019

Аналогично этот вопрос в SQL Server, я хочу запросить метаданные, но в ravenDB.

Идеальная таблица вывода будет

Column Name | Primary Key | Data Type | Size | Nullability 

1 Ответ

3 голосов
/ 24 октября 2019

Вы можете получить «схему» для документа с помощью запроса, например, так:

declare function Schema(doc) {
    var fields = [];
    var keys = Object.keys(doc);
    for(var i = 0; i < keys.length; i ++){
        fields.push({
            Name: keys[i],
            Type: typeof doc[keys[i]]
        })
    }
    return { Fields: fields };
}
from Employees  as e
select Schema(e)
limit 1

Это даст вам JSON, который выглядит следующим образом:

{
    "Fields": [
        {
            "Name": "LastName",
            "Type": "string"
        },
        {
            "Name": "FirstName",
            "Type": "string"
        },
        {
            "Name": "Title",
            "Type": "string"
        },
        {
            "Name": "Address",
            "Type": "object"
        },
        {
            "Name": "HiredAt",
            "Type": "string"
        },
        {
            "Name": "Birthday",
            "Type": "string"
        },
        {
            "Name": "HomePhone",
            "Type": "string"
        },
        {
            "Name": "Extension",
            "Type": "string"
        },
        {
            "Name": "ReportsTo",
            "Type": "string"
        },
        {
            "Name": "Notes",
            "Type": "object"
        },
        {
            "Name": "Territories",
            "Type": "object"
        },
        {
            "Name": "@metadata",
            "Type": "object"
        },
        {
            "Name": "New",
            "Type": "string"
        }
    ],
    "@metadata": {
        "@flags": "HasRevisions, HasAttachments, Reverted",
        "@id": "employees/8-A",
        "@last-modified": "2019-10-23T15:03:03.0396651Z",
        "@change-vector": "A:2239343-ZAAsE6haIECPXQA6XsIt5A, A:1887-0N64iiIdYUKcO+yq1V0cPA, A:6214-xwmnvG1KBkSNXfl7/0yJ1A",
        "@projection": true,
        "@index-score": 0
    }
}

Обратите внимание, что вRavenDB, у вас нет схемы. Разные документы могут иметь разные поля. В зависимости от сложности ваших требований, вам может потребоваться использовать вложенные объекты, такие как Territories или Address.

...