Accessing properties of object/cursor returned from .find and .forEach in mongodb with nodejs

changed schema and everything went crazy (see changes below). now accessing properties from .find() and cursor.forEach() is returning 'undefined' in backend:

EDIT: have found

.find().lean().exec(callback) 

allows access to properties in callback but hard to do anything with them and that to access properties by doing

doc._doc.property 

works in callbacks:

.find(function(err,doc){for (i in docs){doc=docs[i]; console.log(doc._doc.property)}} 
and .forEach(function(doc){console.log(doc._doc.property)}:

My schema once looked like this

for collection of people

{
  name: String,
  v: Types.ObjectId, ref: V //shorthand
  r: {
    e: [{}], 
    u: [{}]  
  }
}

now it looks like this

var people = new mongoose.Schema (
 {
  name: String,
  v: {type: mongoose.Schema.Types.ObjectId, ref: V} 
  r: {
    e: [{type: mongoose.Schema.Types.ObjectId, ref: R}], 
    u: [{type: mongoose.Schema.Types.ObjectId, ref: R}]  
   }
 }
)
mongoose.model('people',people);

for collection of r

var collR = new mongoose.Schema({}, {strict:false})
mongoose.model('R',collR)

nodejs controller 1:

module.exports.getProducts = function (req, res) {

 people.find(req.query)
  .populate('v r.e r.u')
  .exec(function (err, data) {
      if (err) {sendJsonResponse(res,400,err)} 
      else {
       data.forEach(function(single){
         single.r.e.forEach(function(sing){
          console.log(sing) //defined, and i saw rating, and its defined
          console.log(sing.rating); //undefined
          // do something with sing.rating but it's undefined here
          })
       })

     sendJsonResponse(res,200,data);   //not undefined on frontend success callback
     }
});


};

node controller 2:

    module.exports.getProducts = function (req, res) {

 people.find(req.query)
  .populate('v r.e r.u')
  .exec(function (err, data) {
      if (err) {sendJsonResponse(res,400,err)} 
      else {
       data.forEach(function(single){
        R.find({person: single.name}, function (err, dat) {
         dat.forEach(function(sing){
          console.log(sing) //defined and rating defined
          console.log(sing.rating);  //undefined ugh.
          //do something with rating but cant bc undefined here
          })
        })
       })

      //if i send data back here, in success callback, data[i].r.e[j].rating is defined for all i and j, whaaa!?!
     }
});


};

one of the sing's logged from the cursor.forEach loop---

{_id: 1254357653, name: peep, rating: 6, type: some type} 

EDIT:

ya so:

collection.find(query).exec(function(err,docs) {
     docs.forEach(function(singleDoc) {
        console.log(singleDoc._doc.property); //DEFINED, bad boyz 4 lyfe *_*
   })
})

so i finally decided to console.log the darn keys of the document returned from a cursor.forEach

this also returns defined:

 collection.find(query).lean().exec(function(err,docs) {
 console.log(docs[i].property); //for all i, THEY'RE DEFINED!!!!! wooo
})

well now another issue pops up when i try to do an update inside a find

    collection.find(query).exec(function(err,docs) {
      if (err) {return errorHandler(err)};
      var doc = docs[0];
      var captainKeyes = Object.keys(req.body);
      for (k = 0 ; k < captainKeyes.length ; k++) {
        //update the doc key/value pairs with what is sent in req.body
        doc._doc[captainKeyes[k]] = req.body[captainKeyes[k]];
       //from above, learned to access properties captainKeyes[k], you have to first access
      //the hidden property _doc to get to actual doc

      }
      doc.save()  
       //old doc is still in db, damn. and all this used to work before 
       //we added that R collection :(
})

I changed the schema for the collection R to have some keys, changing it from just an empty object with strict: false.

from {{},strict:false} to {{name: String, rating: Number, person: String},strict:false}

now i dont have to use _doc, wooohoooo, and all the queries works normally again.

moral of the story, i didn't really understand how to implement a schemaless collection properly, and then stuff got cray