猫鼬查找结果,然后将字段替换为findOne

法案

我是mongodb的新手,来自关系数据库,如果没有加入,继续进行mongodb的工作会让我有些痛苦。

我要在此处存档的是获取所有项目,并使用正确的项目类型名称而不是项目类型ID更新projectType。不知何故,projects.attrubtes不能被覆盖。然后我尝试了以下帖子。没有运气。任何帮助表示赞赏。任何人都可以给我一些指导将不胜感激。

为什么不能修改猫鼬查询返回的数据(例如:findById)

var _ = require('lodash');
var project = require('./project.model');
var Form = require('../form/form.model');

// Get list of projects
exports.index = function(req, res) {
  project.find(function (err, projects) {
    if(err) { return handleError(res, err); }

    _.each(projects, function(element, index){
      Form.findOne({_id : projects[index].projectType}, '-formContent -_id -createdDateTime', function(error, form){

        if(form !== undefined) projects[index].projectType = form.formName;
      });
    });

    return res.json(200, projects);
  }).sort({ createdDateTime: 'desc' });
};
克列丹

猫鼬的文档不允许添加属性。您需要先调用lean()方法,exec()因为启用了lean选项的查询返回的文档是纯javascript对象,或者将返回的文档转换为纯对象:。

文档

project.find().lean().exec(function (err, projects) {
    projects[0] instanceof mongoose.Document // false
});

因此您的代码应如下所示:

project.find()
    .lean()
    .exec(function (err, projects) {
        if(err) { return handleError(res, err); }

        _.each(projects, function(element, index){
            Form.findOne(
                {_id : projects[index].projectType}, 
                '-formContent -_id -createdDateTime', 
                function(error, form){
                    if(form !== undefined) projects[index].projectType = form.formName;
                }
            );
        });

        return res.json(200, projects);
    }).sort({ createdDateTime: 'desc' });

或将返回的文档转换为普通对象:

project.find()
    .exec(function (err, docs) {
        if(err) return res.send(err);
        var projects = [];
        _.each(docs, function(item, i) {
            var obj = item.toObject();
            Form.findOne(
                {_id : docs[i].projectType}, /* {_id : item.projectType} */
                '-formContent -_id -createdDateTime', 
                function(error, form){
                    if(form !== undefined) {
                        obj.projectType = form.formName;
                        projects.push(obj);
                    }
                }
            );
        });

        res.send(projects); 
    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档