嗨,我是 javascript 新手,有一个问题让我发疯:静态声明为这个的对象有什么区别:
{$or:[{tc_clpar_id:4,tc_par_id:{$in:[79,80]}},{tc_clpar_id:5,tc_par_id:{$in:[105,106]}}]}
以及运行时的对象结构,具有以下功能:
function buildQuery(self,setting,query){
var query = {$or:[]};
cl = 'tc_cl'+self.family+'_id';
att ='tc_'+self.family+'_id';
keys = Object.keys(setting);
for( var k=0;k<keys.length;k++){
ch = keys[k];
var q = {};
q[cl] = ch;
q[att] = {$in:setting[ch]};
query.$or.push(q);
}
return query;
该对象用作node-mongodb-native驱动程序的查询,第一个有效,函数返回的对象正确,我用assert.deepEqual检查了两个对象,没有错误,但是使用生成的对象我得到一个空的结果集,我对这个问题没有任何线索,我认为范围可能有些奇怪,因为函数是另一个对象的方法,或者可能是垃圾收集器。