Mongo 在本地主机上工作的 $lookup 在 heroku 部署中停止工作
Mongo $lookup which worked on localhost stopped working in heroku deployment
我使用 heroku 来部署我的 mongoose 应用程序,而以下聚合 returns 本地主机上的正确数据与本地 mongo 服务器 运行,它 returns heroku 服务器上的空结果,mongolab 用于处理那里的数据库。
这是查询本身:
let projects = this.models.Project.aggregate(
[
{
$lookup: {from: 'users', localField: 'creator', foreignField: '_id', as: 'creator'}
},
{ $unwind : "$creator" },
{
$project: {
name: 1,
updated: { $dateToString: { format: "%Y-%m-%d", date: "$updated" } },
creator: 1,
description: 1
}
}
]
)
.exec((err, projects) => {
console.log("fetched projects is this:", projects)
res.send(projects);
});
这是用户和项目架构:
let userSchema = new Schema({
_id: Schema.Types.ObjectId,
username: String,
password: String,
email: String,
gender: String,
address: String
});
let projectSchema = new Schema({
name: String,
updated: { type: Date, default: Date.now },
creator: {type: Schema.Types.ObjectId, ref: 'User'},
description: String,
issues: [{type: Schema.Types.ObjectId, ref: 'Issue'}]
});
与 mongolab 服务器的连接已正确配置并正常工作,我能够在那里创建用户和项目实例。
我认为问题的核心是文档 ID 在我的本地主机中看起来像这样:
"_id" : ObjectId("56f1ace9e72b71643070e9a0")
在 mongolab 中像这样:
"_id": {
"$oid": "57030f0972365f0300c56c88"
}
提前感谢您的帮助)
mLab(以前称为 MongoLab)尚不支持 3.2 - $lookup
是此版本中的新增内容。
最终我想出了这个适用于当前 MongoLab 的替代方案:
resources.app.get('/projectsItems', (req, res) => {
let projects = this.models.Project.aggregate(
[
{
$project: {
name: 1,
updated: { $dateToString: { format: "%Y-%m-%d", date: "$updated" } },
creator: 1,
description: 1
}
}
]
)
.exec((err, projects) => {
this.models.Project.populate(projects, {path: "creator"}, (err, projects) => {
console.log("fetched projects is this:", projects)
res.send(projects);
});
});
});
有关其工作原理的更多信息,请查看 here。
我使用 heroku 来部署我的 mongoose 应用程序,而以下聚合 returns 本地主机上的正确数据与本地 mongo 服务器 运行,它 returns heroku 服务器上的空结果,mongolab 用于处理那里的数据库。
这是查询本身:
let projects = this.models.Project.aggregate(
[
{
$lookup: {from: 'users', localField: 'creator', foreignField: '_id', as: 'creator'}
},
{ $unwind : "$creator" },
{
$project: {
name: 1,
updated: { $dateToString: { format: "%Y-%m-%d", date: "$updated" } },
creator: 1,
description: 1
}
}
]
)
.exec((err, projects) => {
console.log("fetched projects is this:", projects)
res.send(projects);
});
这是用户和项目架构:
let userSchema = new Schema({
_id: Schema.Types.ObjectId,
username: String,
password: String,
email: String,
gender: String,
address: String
});
let projectSchema = new Schema({
name: String,
updated: { type: Date, default: Date.now },
creator: {type: Schema.Types.ObjectId, ref: 'User'},
description: String,
issues: [{type: Schema.Types.ObjectId, ref: 'Issue'}]
});
与 mongolab 服务器的连接已正确配置并正常工作,我能够在那里创建用户和项目实例。
我认为问题的核心是文档 ID 在我的本地主机中看起来像这样:
"_id" : ObjectId("56f1ace9e72b71643070e9a0")
在 mongolab 中像这样:
"_id": {
"$oid": "57030f0972365f0300c56c88"
}
提前感谢您的帮助)
mLab(以前称为 MongoLab)尚不支持 3.2 - $lookup
是此版本中的新增内容。
最终我想出了这个适用于当前 MongoLab 的替代方案:
resources.app.get('/projectsItems', (req, res) => {
let projects = this.models.Project.aggregate(
[
{
$project: {
name: 1,
updated: { $dateToString: { format: "%Y-%m-%d", date: "$updated" } },
creator: 1,
description: 1
}
}
]
)
.exec((err, projects) => {
this.models.Project.populate(projects, {path: "creator"}, (err, projects) => {
console.log("fetched projects is this:", projects)
res.send(projects);
});
});
});
有关其工作原理的更多信息,请查看 here。