在Mongo中,如何确定对象的嵌套深度?

时间:2011-06-08 22:17:33

标签: mongodb

我正在使用MongoDB来存储一个包含子对象的对象,该对象[通常]只包含名称/值对的字符串。我们看到一些数据损坏,其中对象变得更加嵌套,而不是应该嵌套。

例如,这是一个有效的对象:

{ "_id" : 1, "d": { "a":"foo", "b":"bar" } }

我们看到一些无效的对象,如下所示:

{ "_id" : 1, "d": { "a":"foo", "b":{ "c":"bar" } } }

或:

{ "_id" : 1, "d": { "a":{ "z":"foo" }, "b":"bar" } }

我想写一个查询来查找所有损坏的值。 “d”属性中的值是对象而不是字符串的任何内容。

2 个答案:

答案 0 :(得分:1)

似乎你需要检查'b'属性的类型:

// matches if 'b' is a string - valid objects
db.things.find( { "d.b" : { $type : 2 } } ); 

 // matches if 'b' is a object - invalid objects
db.things.find( { "d.b" : { $type : 3 } } );

Documentation

答案 1 :(得分:1)

db.foo.find(function() { for (f in this) { var v = this[f]; if (typeof v == "object" && !(v instanceof Array) && !(v instanceof ObjectId) && !(v instanceof NumberLong) && !(v instanceof Date) && !(v instanceof BinData)) return true; } return false; })

类型检查很难看,可以做得更好吗?