У меня есть база данных MongoDB, которую я запрашиваю с помощью Mon goose.
Я использую коллекцию audits
для хранения информации об изменениях обновлений, неудачных попытках входа в систему и ошибках.
Модель аудита
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
const Schema = mongoose.Schema;
const auditSchema = new Schema({
ref: {
type: String,
required: true
},
linkedId: {
type: Schema.ObjectId,
refPath: 'ref'
},
action: {
type: String,
enum: ['insert', 'update', 'delete', 'special']
},
/* ... lots more fields */
});
module.exports = mongoose.model('audit', auditSchema);
Запрашивая эту коллекцию в моем docker контейнере, используя запрос ниже:
return Audit.find().sort({date: -1})
.skip(skipInt)
.limit(limitInt)
.populate('user')
.populate('linkedId')
.exec();
Я получаю следующую ошибку:
Schema hasn't been registered for model "error". Use mongoose.model(name, schema)
Нет схемы «error», однако я проверил, что все записи в коллекции с ошибкой ref
не имеют заполненного linkedId
:
{ref: 'error', linkedId: {$exists: true}} // 0 documents
Я не понимаю, почему это нормально работает в моей системе разработки (win 10, отладка vscode), но ошибки как в моем локальном docker, так и aws lamda.
Я запустил полная перестройка docker изображений, чтобы попытаться убедиться, что это не проблема кеширования, но ошибка остается.
редактировать
Пробовал два docker файлы, оба демонстрируют одинаковое поведение, построенные на машине windows 10
FROM node:8-alpine
WORKDIR /usr/app
COPY package.json .
RUN npm i --quiet
COPY . .
RUN npm install pm2 -g
CMD ["pm2-runtime", "./bin/www"]
FROM node:12
WORKDIR /tmp
RUN wget https://downloadarchive.documentfoundation.org/libreoffice/old/5.4.7.2/deb/x86_64/LibreOffice_5.4.7.2_Linux_x86-64_deb.tar.gz -O libo.tar.gz
RUN apt update \
&& apt install -y libxinerama1 libfontconfig1 libdbus-glib-1-2 libcairo2 libcups2 libglu1-mesa libsm6 unzip \
&& tar -zxvf libo.tar.gz
WORKDIR /tmp/LibreOffice_5.4.7.2_Linux_x86-64_deb/DEBS
RUN dpkg -i *.deb
WORKDIR /usr/app
COPY package.json .
RUN rm -rf node_modules
RUN npm install --arch=x64 --platform=linux sharp
RUN npm i --quiet
COPY . .
RUN npm install pm2 -g
CMD ["pm2-runtime", "./bin/www"]
редактировать 2
* 103 6 * Я думаю, что нашел разницу, но не решение, в контейнере отображается mon goose версия
5.9.28
, но package. json перечислено
^5.8.3
, обновление
mongoose
до версии
5.9.28
дает ту же ошибку при моя локальная установка, однако теперь я застрял с той же ошибкой и не знаю, как ее решить.