无法向Mongoose查询返回的对象添加新属性 [英] Can't add a new property to an object returned by Mongoose query

查看:336
本文介绍了无法向Mongoose查询返回的对象添加新属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Node.js,MongoDB和Express编写API.我似乎无法向要迭代的位置对象添加新属性.

I'm coding an API with Node.js, MongoDB and Express. I can't seem to add a new property to the location objects I'm iterating through.

我完全不了解我的代码存在的问题. loc是一个普通对象,它应该可以工作.我错了吗?

I don't understand the issue with my code at all. loc is a plain object, it should work. Am I wrong?

// **********************************
// GET Locations
// **********************************
// Create endpoint /api/locations for GET

exports.getLocations = function(req, res) {

    // Use the Location model to find all locations
    // of a particular user

    Location.find({}, function(err, locations) {
        if (err)
            res.send(err);
        var counter = 0;
        var l = locations.length;

        //we create a closure to access the current location object
        var closure = function(location) {

             //we are returning the callback
             return function(err, user) {
                if (err)
                    res.send(err);
                counter++;
                console.log("The location object: \n"+location+"\n\n");

                console.log("The value we want to add to the object: \n"+user.username+"\n\n");

                //THAT DOESN'T WORK
                location.username = user.username;

                console.log("The updated object: \n"+location+"\n\n");

                if(counter === l) res.json(locations);
            };
        };

        //We respond with the locations
        for (var i = 0; i < l; i++) {

            //we call our function
            User.findById(locations[i].userId, "username", closure(locations[i]));
        }
    });
};

这是我在控制台中得到的输出...这太奇怪了.

Here's the output I get in the console... This is so weird.

The location object:
{ _id: 54c65c665ff13962b6a367a1,
  userId: '54c659ba8ac00324b617f3f9',
  message: 'Big party here tonight!!',
  longitude: 45.5,
  latitude: 73.5667,
  __v: 0 }


The value we want to add to the object:
test123


The updated object:
{ _id: 54c65c665ff13962b6a367a1,
  userId: '54c659ba8ac00324b617f3f9',
  message: 'Big party here tonight!!',
  longitude: 45.5,
  latitude: 73.5667,
  __v: 0 }

推荐答案

在我们的例子中,您拥有MongooseDocument而不是plain JS对象.为了获得plain JS对象,您应该使用 .lean 这样

In our case you have MongooseDocument not plain JS object. In order to get plain JS object you should use .lean like this

Location.find({}).lean().exec(function(err, locations) {
    ...
});

这篇关于无法向Mongoose查询返回的对象添加新属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆