在 localhost 上工作的 Mongo $lookup 在 heroku 部署中停止工作
Posted
技术标签:
【中文标题】在 localhost 上工作的 Mongo $lookup 在 heroku 部署中停止工作【英文标题】:Mongo $lookup which worked on localhost stopped working in heroku deployment 【发布时间】:2016-07-24 18:38:48 【问题描述】:我使用 heroku 部署我的 mongoose 应用程序,而以下聚合在本地 mongo 服务器运行的 localhost 上返回正确数据,它在 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"
提前感谢您的帮助)
【问题讨论】:
【参考方案1】:mLab(以前的 MongoLab)尚不支持 3.2 - $lookup
是此版本中的新功能。
http://docs.mlab.com/ops/#version-mgmt
【讨论】:
感谢您的信息,我在怀疑类似的事情【参考方案2】:最终我想出了这个适用于当前 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。
【讨论】:
以上是关于在 localhost 上工作的 Mongo $lookup 在 heroku 部署中停止工作的主要内容,如果未能解决你的问题,请参考以下文章