Многие из этих функций afterConstruct, включая одну apostrophe-caches
, вызывают либо db.getCollection
, либо collection.ensureIndex
.Вот соответствующий код из модуля caches:
https://gist.github.com/boutell/c4a1b4abda4a19572428b11d0a8babc8
Так что ваша реализация должна поддерживать обе эти вещи, с обратными вызовами или без.
Ваша реализация getCollectionпохоже, он должен работать.
Однако метод ensureIndex
для LokiJS
очень отличается от метода в MongoDB.MongoDB ожидает:
.ensureIndex({ field: 1 }, callback);
В то время как LokiJS
ожидает:
.ensureIndex(fieldName, force)
Это совершенно другой метод с другим воздействием.Нельзя ожидать, что он заменит реализацию MongoDB без дополнительных усилий.
Вызов его с помощью объекта и обратного вызова не устанавливает ожидаемый индекс, и, что более важно, никогда не вызывает обратного вызова.Вот почему это не работает.Без вызова обратного вызова Apostrophe не может двигаться дальше с инициализацией.
Таким образом, проблема заключается не в самойConConstruct, а в неполной эмуляции API MongoDB.Апостроф требует полной реализации API, чтобы гарантировать успех.Возможно, вы добьетесь большего успеха с «моно-подобным», который пытается достичь более высокого уровня совместимости, хотя даже CosmosDB на самом деле не подходит (у него, например, нет общепринятого distinct
удобного метода).
Спасибо, что дали этому попытку и предоставили сообществу больше данных о другой полусовместимой базе данных Mongo, хотя - возможно, одна из них в конечном итоге будет достаточно полной, или сообщество Apostrophe внесет свой вклад в создание этого.