我需要从数组中传递的字符串生成一个$or
过滤器,以从20K文档集合中选择文档。
所以我写了下面的函数产生的$or
条件:
function orConditionCreator(attName, tagsArray)
{
var myarray = [];
var myJSON = "";
for (var i = 0; i < tagsArray.length; i++) {
var key = attName;
var json = { };
// forming regex with case insensitivity
json[key] = "/" + tagsArray[i] + "/i";
myarray.push(json);
}
myJSON = JSON.stringify({ $or: myarray });
// myJSON contains quotes like in { "name" : "/HarryPotter/i" }
// this is not desirable for regex. So we strip the quotes
myJSON = myJSON.replace(/\"/g, "");
return myJSON;
}
然后我把它像:
//tags[0] = "harry" , tags[1] = "potter"
var orCondition = orConditionCreator("name", tags);
mongo.peopleColl.find(orCondition).toArray(function(err, documents) {
if(err) { /* handle */ }
// do stuff with documents
});
这里,如预期find(orCondition)
不工作。现在,如果我手动传递)由orConditionCreator
回到collection.find(字符串作为
它工作正常,但与使用orCondition
变量的第一例失败。
任何关于动态创建这个$或条件的帮助都很好。谢谢!
您可以编辑您的文章,以包括'orConditionCreator'的代码?这可能不会返回您认为的结果。另外,在这里使用'$ in'而不是'$或'会更有效率。 – JohnnyHK
你能提供错误信息吗?你必须有另一个错误,错字... etc – damphat
@JohnnyHK:我已经回滚了原来的帖子,以包含'orConditionCreator'。请检查一下。正如名字是像“哈利波特”这样的单个字符串,那么$在仍然有效? – Haywire