无法向Mongoose查询返回的对象添加新属性 [英] Can't add a new property to an object returned by Mongoose query
本文介绍了无法向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屋!
查看全文