При создании нового документа в ravendb имя коллекции отсутствует в метаданных, и документ помечен как @пустая коллекция.

Я пытаюсь создать новую коллекцию в ravendb, используя клиент узла apollo. Хотя документ создается и хранится в ravendb, значение «коллекция» из метаданных отсутствует. И в результате документ хранится в коллекции @empty. Интересно, чего мне не хватает.


person prasadv    schedule 13.04.2019    source источник
comment
Как вы создаете документ? Можете ли вы предоставить код? Попробуйте создать с именем документа все в нижнем регистре!   -  person Danielle    schedule 14.04.2019
comment
@Danielle Ниже приведен фрагмент того, как я храню документ. Я использую клиент узла Apollo. const sched: IScheduling = { appointment: { id: 'appointments/1-A', client: { id: 'clients/1-A', name: 'Entity', }, }, status: 'Pending', tier: 1, sendOn: new Date() }; await session.store<Scheduling>(sched); await session.saveChanges();   -  person prasadv    schedule 14.04.2019


Ответы (2)


Я нашел решение. Проблема была вызвана тем, что я пытался передать на лету объект Json типа интерфейса, в то время как требуется передать объект класса, реализующего интерфейс. RavenDB использует имя класса объекта для установки идентификатора и организации документов в коллекциях.

person prasadv    schedule 14.04.2019

  1. Если вы используете литералы объектов для сохраняемых сущностей, вам необходимо установить findCollectionNameForObjectLiteral() в DocumentStore перед вызовом initialize()
const store = new DocumentStore(urls, database);
store.conventions.findCollectionNameForObjectLiteral = entity => entity["collection"];
// ...
store.initialize();

Это необходимо сделать до вызова initialize() для экземпляра DocumentStore.
В противном случае сущности создаются в коллекции @empty.

См. https://github.com/ravendb/ravendb-nodejs-client#using-object-literals-for-entities

  1. Если вы используете классы для хранения сущностей, экземпляр класса должен быть передан в store()
    См.: https://github.com/ravendb/ravendb-nodejs-client#using-classes-for-entities
person Danielle    schedule 02.05.2019