【问题标题】:Mongo $lookup which worked on localhost stopped working in heroku deployment在 localhost 上工作的 Mongo $lookup 在 heroku 部署中停止工作
【发布时间】: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"
}

提前感谢您的帮助)

【问题讨论】:

    标签: express heroku mongoose aggregate mlab


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 2012-04-30
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      相关资源
      最近更新 更多