gpt4 book ai didi

docker - Mongoose 查询/模式错误仅在 docker 容器中

转载 作者:行者123 更新时间:2023-12-02 17:48:56 25 4
gpt4 key购买 nike

我有一个 MongoDB 数据库,我正在使用 Mongoose 进行查询。
我正在使用一个集合 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)
没有“错误”模式,但是我检查了集合中的所有条目是否带有 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
我想我找到了区别但没有找到解决方案,容器显示 Mongoose 版本 5.9.28但是 package.json 列出了 ^5.8.3 , 更新 mongoose到版本 5.9.28在我的本地安装中给出了同样的错误,但是现在我遇到了同样的错误并且不知道如何解决它。

最佳答案

我不知道 Docker 或 AWS Lambda,但我检查了您的 auditSchema并在简单的 Node.js express 应用程序中查询,同样的错误也在我的末尾重现。

MissingSchemaError:Schema hasn't been registered for model "error". Use mongoose.model(name, schema)
所以问题是: linkedIdauditSchema 中声明的属性(property)如 refpath:ref这意味着它将根据 ref 的值从多个集合中填充文档中的属性。所以当我们查询 Audit.find().populate('linkedId')它从 Audit 获取所有记录收集和填充 linkedId对于每个文档。如果文档包含值 ref:error然后 Mongoose 尝试寻找 error人口集合,我们没有任何错误模式或错误集合,所以它会导致上述错误。
将为您 Audit 中的每个文档生成此错误收藏其 ref字段包含除 error 以外的值以及。 Mongoose 需要存在您指定为 ref 的所有模式/集合.
要解决这个问题,您需要为您在 ref 中提供的每个值定义集合。 Audit 的属性(property)文件
请引用 this了解更多 refpath .

关于docker - Mongoose 查询/模式错误仅在 docker 容器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63245389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com