[英]Declaring a property in a Javascript object that ISN'T a string
我正在嘗試構建一個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
)並且它工作正常,我以完全相同的方式聲明它。
是否可以確保該屬性不被視為字符串? 我怎么能在這里實現這個目標?
Javascript對象鍵始終強制為字符串。 你可以在對象文字{key: 0}
指定一些沒有引號的{key: 0}
或者使用點符號object.key = 0
這只是鍵的語法糖,它也會發生與標識符的生成相匹配。 '$或'是有效的JavaScript標識符,因此您可以說:
{$or: [...]}
要么
{"$or": [...]}
要么
{'$or': [...]}
而且他們都是等同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.