2013-07-29 3 views
0

MongoDB으로 전달할 자바 스크립트 객체를 생성하려고합니다. 이 데이터베이스는 한 번에 속성의 여러 키를 검색 할 수있는 연산자 $or을 사용합니다. 실제로 룩업 함수 연산자이기 때문에이 때문에 문자열이 아닌 Javascript 객체에서 속성 선언하기

상기 $or 연산자 는 따옴표하지있다. 참고로

은 조회 기능은 다음과 같습니다 : 나는 '빌드'일부 변수의 밖으로 $or 속성에 방법을 찾은

db.inventory.find({ price:1.99, $or: [ { qty: { $lt: 20 } }, { sale: true } ] }) 

하지만 어떤 이유에 대한 속성 이름처럼 치료를 받고 계속 그것은 문자열입니다. 여기에 내 코드입니다 : 난,

{ '$or': [ { designer: 'abc' }, { designer: 'def' } ] } 

내가 다른 곳 (대신 $or$push와) 유사한 코드를 사용하고 그것을 잘 작동합니다 : 내 콘솔에서

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); 

,이 출력되는대로입니다 정확히 같은 방식으로 선언합니다.

이 문자열로 처리되지 않도록 할 수 있습니까? 여기 어떻게 할 수 있습니까?

+0

'criteria [ '$ or']'이 객체를 반환합니까? – rps

+0

@rps 나는 당신이 무엇을 요구하고 있는지 잘 모르겠습니다. 네, 배열을 반환합니다. – Jascination

+0

나는 물체 자체를 얻을 수있을 때 왜 그 속성이 문자열 대신에 객체가되기를 원하는지 왜 궁금해했다. thats all – rps

답변

2

자바 스크립트 객체 키는 항상 문자열로 강제 변환됩니다. 객체 리터럴 {key: 0}에서 따옴표없이 일부 키를 지정하거나 도트 표기법 object.key = 0을 사용할 수 있다는 것은 식별자의 생산과도 일치하는 키의 구문 설탕 일뿐입니다. '$가 또는'자바 스크립트 식별자 유효한, 그래서 당신이 말하는 중 하나를 수행 할 수 있습니다

{$or: [...]} 

또는

{"$or": [...]} 

또는

{'$or': [...]} 

그들은 모두 동등한입니다.

+0

나는 이것이 사실이라고 생각했다. 그것 주위에 따옴표와 함께 반환되지 않도록하는 몇 가지 방법이 있습니까? – Jascination

+0

내가 아는 것은 아닙니다. Javascript 객체 리터럴을 전송하고 저장해야하는 방법을 표준화 한 JSON 사양 (http://www.json.org)은 달리 필요하지 않든 상관없이 큰 따옴표를 포함하는 모든 키를 필요로합니다. –

+0

사실, MongoDB는'$ or'가 따옴표로 묶여 있는지 여부를 신경 쓰지 않아서 내 코드의 다른 곳에 오류가 있어야합니다! – Jascination

관련 문제