我正在尝试构建一个 javascript 对象以传递给MongoDB
. 该数据库使用一个运算符$or
,可让您一次搜索属性中的多个键。
正因为如此,$or
运算符不能放在引号中,因为它实际上是查找函数中的运算符。
作为参考,查找函数如下所示:
db.inventory.find( { price:1.99, $or: [ { qty: { $lt: 20 } }, { sale: true } ] } )
我找到了一种$or
从一些变量“构建”属性的方法,但由于某种原因,属性名称一直被视为字符串。这是我的代码:
var criteria = { $or: []};
properties.forEach(function(property) {
var propParts = property.split('=');
if(!(propParts[1].indexOf('&') === -1)){
var value = propParts[1].match(/[-'"\w\s]+/g);
for (var i = 0; i<value.length; i++){
var tempObj = {};
tempObj[propParts[0]] = value[i];
criteria.$or.push(tempObj);
}
}else{
criteria[propParts[0]] = new RegExp(propParts[1], "i");
}
});
if(criteria.$or.length<=0){
delete criteria.$or;
}
console.log(criteria);
在我的控制台中,这被输出为:
{ '$or': [ { designer: 'abc' }, { designer: 'def' } ] }
我在其他地方使用类似的代码($push
而不是$or
),它工作得很好,我以完全相同的方式声明它。
是否可以确保该属性不被视为字符串?我怎样才能在这里实现这一目标?