nodejs传递值不起作用

时间:2013-09-09 15:09:11

标签: javascript node.js mongodb

在我的Nodejs和MongoDb应用程序中,我必须在运行时构造查询,我使用此函数来创建查询:

function buildQuery(self,setting){
var query = {$or:[]}
cl = 'tc_cl'+self.family+'_id'
att ='tc_'+self.family+'_id'
keys = Object.keys(setting)
var l = []
for( var k=0;k<keys.length;k++){
    ch = keys[k]
    var q = {}
    q[cl] = ch
    q[att] = {$in:setting[ch]}
    l.push(q)
}
return {$or:l}

它给我一个这样的对象:

{$or:[{tc_clpar_id:4,tc_par_id:{$in:[79,80]}},{tc_clpar_id:5,tc_par_id:{$in:[105,106]}}]}

这是我的代码的重要部分:

function executesQuery(self,query,next){
console.log(query)
console.time('query')
self.collection.find(query).toArray(function(e,o){if(e){return console.dir(e)}
next(e,o);
console.timeEnd('query');
self.db.close();
})
}


test('executeFilter',function(t){
data = {5:[105,106],4:[79,80]}
//var query = {$or:[{tc_clpar_id:4,tc_par_id:{$in:[79,80]}},{tc_clpar_id:5,tc_par_id:{$in:[105,106]}}]};
var query = filter.buildQuery(filter,data)
console.time('filter')
filter.executesFilter(filter,query,function(e,o){
    console.timeEnd('filter')
    t.equal(o.length,33136)
    t.end()
})

如果我将从buildQuery获取的对象传递给executionFilter它不起作用,但是如果我直接分配查询应该具有的值:{$or:[{tc_clpar_id:4,tc_par_id:{$in:[79,80]}},{tc_clpar_id:5,tc_par_id:{$in:[105,106]}}]},它就可以工作。

我使用assert.deepEqual检查了我从buildQuery获得的对象是否等于{$or:[{tc_clpar_id:4,tc_par_id:{$in:[79,80]}},{tc_clpar_id:5,tc_par_id:{$in:[105,106]}}]}并且它们是。

所以现在我真的不明白出了什么问题。

0 个答案:

没有答案