Я подготовил небольшой пример с иилюстрацией проблемы: https://gist.github.com/lbeschastny/87b2b20442d93c092a8bdffebce98511
В примере создается три коллекции:
- коллекция
coll1
- коллекция
coll2, ссылающаяся на коллекцию coll1 с проекцией { _id: 1 }
- коллекция
coll3, ссылающаяся на коллекцию coll1 с проекцией { _id: 1, foo: 1 }
В этом случае при добавлении нового документа в коллекцию coll2 целостность базы не проверяется:
// отрабатывает без ошибок, хотя документа по ссылке не существует
coll2.insertOne({
foreignKey: 'does not exist'
})
Но при добавлении нового документа в коллекцию coll3 проверка происходит:
// падает с ошибкой "Document with _id=does not exist is not found in `coll1` collection"
coll3.insertOne({
foreignKey: 'does not exist'
})
Судя по коду (embedderHooks.js#L117), так и было задумано. Но выглядит подобное поведение очень странно, возможно это все-таки ошибка.
Весь пример можно запустить командой:
git clone git@gist.github.com:87b2b20442d93c092a8bdffebce98511.git && cd 87b2b20442d93c092a8bdffebce98511 && npm i && node .
Я подготовил небольшой пример с иилюстрацией проблемы: https://gist.github.com/lbeschastny/87b2b20442d93c092a8bdffebce98511
В примере создается три коллекции:
coll1coll2, ссылающаяся на коллекциюcoll1с проекцией{ _id: 1 }coll3, ссылающаяся на коллекциюcoll1с проекцией{ _id: 1, foo: 1 }В этом случае при добавлении нового документа в коллекцию
coll2целостность базы не проверяется:Но при добавлении нового документа в коллекцию
coll3проверка происходит:Судя по коду (embedderHooks.js#L117), так и было задумано. Но выглядит подобное поведение очень странно, возможно это все-таки ошибка.
Весь пример можно запустить командой: