我正在检查MongoDB的runCommand
方法中的代码,用于我的教育:
function ( obj, extra ){
if ( typeof( obj ) == "string" ){
var n = {};
n[obj] = 1;
obj = n;
if ( extra && typeof( extra ) == "object" ) {
for ( var x in extra ) {
n[x] = extra[x];
}
}
}
return this.getCollection( "$cmd" ).findOne( obj );
}
我专注于这个块:
var n = {};
n[obj] = 1;
obj = n;
现在,documentation说明了该方法:
数据库命令,以文档形式或字符串形式指定。如果指定为字符串,db.runCommand()会将字符串转换为文档。
虽然这简单解释了第三行,但我试图找出开发人员对此问题的看法:
n[obj] = 1;
我对此的好处的想法是,这可以用于对象上的平等目的,也许是在内部调用上,其中:
var checkEq = n["{num: 1}"];
将返回" truey" 1,特别适用于快速和干净的平等检查,但是对于经验丰富的开发人员有关此技巧有用的案例的任何见解/保证都会很好。
答案 0 :(得分:1)
我相信n[obj] = 1;
正在用于规范化传入的命令。我们可以在文档中看到issue-commands,它们的所有示例命令都是runCommand({command: 1})
形式。例如,如果有人使用runCommand("buildInfo")
,则字符串"buildInfo"
将转换为对象{"buildInfo": 1}
。
为什么他们使用这个对象表示法,键是命令,而值是一个超出我的。我梳理了文档和代码,原因是值为1,但我的搜索空手而归。