背景:这个问题是由 Doctrine ODM 提出的,它在 DBRefs 中使用了一个 _doctrine_class_name 字段,该字段在 Mongo shell (2.2.2) 中是不可见的,并且当我们不得不手动更新记录时造成了相当大的罪魁祸首。
例子:
mongoshell> use testdb; // for safety
mongoshell> a = DBRef("layout_block", ObjectId("510a71fde1dc610965000005")); // create a dbref
mongoshell> a.hiddenfield = "whatever" // add a field that's normally not there like Doctrine does
mongoshell> a // view it's contents, you won't see hiddenfield
mongoshell> for (k in a) { var val = a[k]; print( k + "(" + typeof(val) + "): " + val ); } // you can see that there's more if you iterate through it
mongoshell> db.testcoll.save({ref: [ a ]}) // you can have it in a collection
mongoshell> db.testcoll.findOne(); // and normally you won't see it
如果没有像下面的第三个命令(或 MongoVue)这样的迭代,如果您只使用 find(),您将永远不会知道 DBRef 中还有更多内容。我还没有为 find() 找到任何可用的修饰符(尝试过:toArray、tojson、printjson、toString、hex、base64、pretty、chatty、verbose ......)。
有没有人有办法在 mongo shell 中详细显示 DBRef 内容?