1

I can't read Object property got with MongoDB. I work with MeteorJS. I create object like this

header = ["name"];
values = ["word1", "word2"];
var tmp = {};
var data = new Array();
for (var cnt = 0; cnt < values.length; cnt++){
    for (var i = 0; i < header.length; i++) {
         temp[header[i]] = values[i];
    }
data.push(temp);

Than I insert into MongoDB like this

for (obj in data) {
    Badwords.insert(data[obj]);
}

I select data and cannot read property. There're browser console

Badwords.findOne()

Object {_id: "uNRNDtp3RGrKA6gWz", "name": "word1"}

Badwords.findOne().hasOwnProperty("name")

false

Badwords.findOne().hasOwnProperty('name')

false

Badwords.findOne().hasOwnProperty('\"name\"')

false

Badwords.findOne().hasOwnProperty('\'name\'')

false

Badwords.findOne().hasOwnProperty("\'name\'")

false

Badwords.findOne().hasOwnProperty("\"name\"")

false

Badwords.findOne()

Object {_id: "uNRNDtp3RGrKA6gWz", "name": "word1"}

Badwords.findOne()["name"]

undefined

But

Badwords.findOne().hasOwnProperty("_id")
true

Maybe problem in property name: it is "name" , but not name. keys is undefined.

Badwords.findOne().keys
undefined

richardtz, I add method getKey():

var myObj = Badwords.findOne()
undefined

myObj.getkey = function(obj){
   var keys = [];
   for(var key in obj){
      keys.push(key);
   }
   return keys;
}
myObj.getkey(myObj)
["_id", "name", "getkey"]

2 Answers2

0

Property name is "name" and has length 5. To check it:

var prop = '';
for (var i in Badwords.findOne()) {
    prop = i;
}
"name"

prop.length
5

prop.charCodeAt(0)
65279

prop.charCodeAt(1)
110
0

I ran your code and found 2 bugs. The first, was a missing } at the end of the first for loop and the second one, you define a tmp object and use temp instead. The correct code i ran were:

header = ["name"];
values = ["word1", "word2"];
var temp = {};
var data = new Array();
for (var cnt = 0; cnt < values.length; cnt++) {
  for (var i = 0; i < header.length; i++) {
    temp[header[i]] = values[i];
  }
  data.push(temp);
}
for (obj in data) {
  Badwords.insert(data[obj]);
}

And then the hasOwnProperty gives the desired results

Badwords.findOne().hasOwnProperty("name");
true
mstamos
  • 111
  • 1
  • 3