在ravendb中创建新文档时,元数据中缺少集合名称,并且文档被标记为@empty collection
While creating new document in ravendb, collection name is missing in metadata, and the document is marked under @empty collection
我正在尝试使用 apollo 节点客户端在 ravendb 中创建一个新集合。虽然文档是在 ravendb 中创建和存储的,但是元数据中的 "collection" 值丢失了。因此,文档存储在@empty 集合下。想知道我错过了什么。
我找到了解决办法。这个问题是因为我试图传递一个动态的 Json 接口类型的对象,而它需要传递 class 的对象,实现接口。 RavenDB 使用对象的 class 名称来设置 id 并在集合下组织文档。
- 如果您使用 Object Literals 来存储实体,那么您需要在
DocumentStore
上设置 findCollectionNameForObjectLiteral()
,然后再调用 initialize()
const store = new DocumentStore(urls, database);
store.conventions.findCollectionNameForObjectLiteral = entity => entity["collection"];
// ...
store.initialize();
这必须在 DocumentStore 实例上的 initialize() 调用之前完成。
否则,将在@empty 集合中创建实体。
见https://github.com/ravendb/ravendb-nodejs-client#using-object-literals-for-entities
- 如果您使用 classes 存储实体,则必须将 class 的实例传递给
store()
参见:https://github.com/ravendb/ravendb-nodejs-client#using-classes-for-entities
我正在尝试使用 apollo 节点客户端在 ravendb 中创建一个新集合。虽然文档是在 ravendb 中创建和存储的,但是元数据中的 "collection" 值丢失了。因此,文档存储在@empty 集合下。想知道我错过了什么。
我找到了解决办法。这个问题是因为我试图传递一个动态的 Json 接口类型的对象,而它需要传递 class 的对象,实现接口。 RavenDB 使用对象的 class 名称来设置 id 并在集合下组织文档。
- 如果您使用 Object Literals 来存储实体,那么您需要在
DocumentStore
上设置findCollectionNameForObjectLiteral()
,然后再调用initialize()
const store = new DocumentStore(urls, database);
store.conventions.findCollectionNameForObjectLiteral = entity => entity["collection"];
// ...
store.initialize();
这必须在 DocumentStore 实例上的 initialize() 调用之前完成。
否则,将在@empty 集合中创建实体。
见https://github.com/ravendb/ravendb-nodejs-client#using-object-literals-for-entities
- 如果您使用 classes 存储实体,则必须将 class 的实例传递给
store()
参见:https://github.com/ravendb/ravendb-nodejs-client#using-classes-for-entities