2015-01-26 43 views
0

我正在用Node.js,MongoDB和Express編寫API。我似乎無法添加一個新的屬性,我正在迭代的位置對象。無法添加新的屬性到由Mongoose查詢返回的對象

我完全不理解我的代碼問題。 loc是一個普通的對象,它應該工作。我錯了嗎?

// ********************************** 
// 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])); 
     } 
    }); 
}; 

這是我在控制檯中得到的輸出...這太奇怪了。

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 } 

回答

5

在我們的情況下,你有沒有MongooseDocument JS plain對象。爲了得到plain JS對象,您應該使用.lean這樣的

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