に渡される 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
)。それは問題なく動作します。まったく同じ方法で宣言しています。
プロパティが文字列として扱われていないことを確認することは可能ですか? ここでこれを達成するにはどうすればよいですか?