2014-10-16 2 views
4

속성과 자식 속성이 MongoDB 문서에 존재하는지 확인하는보다 일반적인 방법이 있습니까?MongoDB는 속성이 존재하는지 확인합니다 (자식 속성)

지금은 속성 또는 전체 문서 중 하나가 존재하지 않을 때 오류가 발생하지 않도록이 작업을 수행하고 있습니다.

//Check to see if the document exists 
if(Donate.findOne({'debit.id': debitID})) { 
    //Check to see if the document has the property "credit" 
    if(Donate.findOne({'debit.id': debitID}).credit){ 
     //Check to see if the object credit has the property sent 
     if(!Donate.findOne({'debit.id': debitID}).credit.sent){ 
      doSomething(); 
     } 
    } 
} 

!Donate.findOne({'debit.id': debitID}).credit.sent은 sent가 true로 설정되어 있는지 확인합니다. 실행하고 싶지 않다면 doSomething();

답변

5

이 시도 : 커피 스크립트를 사용하여

Donate.findOne({'debit.id': debitId, 'credit.sent': {$exists: true}}); 

내가 코드를 등록하면 확인 할 나타나는 당신이 뭘 하려는지 전혀 모르겠습니다 만 "credit"및 "credit.sent"이 존재하지 않습니다. 그것이 당신이 찾고있는 것이라면, $exists 항목을 위의 false으로 변경하십시오.

+0

감사합니다. 코드가 올바르게 읽혀 지도록 코드를 수정했습니다. 이'''! Donate.findOne ({ 'debit.id': debitID}). credit.sent'''의 이유는 sent가 true로 설정되었는지 확인하는 것입니다. 그것이 "''doSomething();''을 실행하고 싶지 않다면''' – JoshJoe

+0

아, 이제 이해가됩니다. – richsilv

2

편집 : @richsilv가 제안한 솔루션이 달성하려는 목표에 따라 더 나은 것으로 나타났습니다. 그것이 누군가에게 어떤 용도의 것이라도 나는 대답 할 것입니다.

1) 순수 JS를 사용합니다. 변수에 Donate.findOne({'debit.id': debitID})을 저장하도록 코드를 리팩토링 할 수 있습니다. 이것은 다음과 같이 보일 것이다 : 당신이 ! 연산자로 엉망이 같은

var donation=Donate.findOne({'debit.id': debitID}); 
if(donation && donation.credit && donation.credit.sent){ 
    doSomething(); 
} 

것 같습니다 : 당신이 존재를 확인하려는 경우이, 불필요한입니다 !이 inexistence를 확인하는 데 사용됩니다.

2) JS 위에 구문 설탕을 제공하는 다른 언어를 사용할 수 있습니다.

donation = Donate.findOne 
    'debit.id': debitID 
if donation?.credit?.sent 
    doSomething() 
+0

실수를 저지르고 답변을 주셔서 감사합니다. 나는 MongoDB 함수가 자바 스크립트 함수처럼 사용될 수 있다는 것을 몰랐다. 이것은 여전히 ​​유용한 답변이며 Coffeescript 예제에 감사드립니다. – JoshJoe

관련 문제