2014-11-18 2 views
2

Azure DocumentDB에서 아래 쿼리가 지원됩니까? 문서를 반환하지 않습니다.Azure DocumentDB - 결과를 반환하는 쿼리

Variables values at runtime: 
    1. collectionLink = "<link for my collection>" 
    2. feedOptions = new FeedOptions { MaxItemCount = 2 } 
    3. name = "chris" 

client.CreateDocumentQuery<T>(collectionLink, feedOptions).Where(m => (m.Status == "Foo" && (m.Black.Name == null || m.Black.Name != name) && (m.White.Name == null || m.White.Name != name))); 

다음과 같은 간단한 쿼리로 테스트 한 결과 두 가지 모두 예상되는 결과를 반환합니다.

{ 
    "id": "1992db52-c9c6-4496-aaaa-f8cb83a8c6b0", 
    "status": "Foo", 
    "size": 19, 
    "black": { 
    "name": "charlie" 
    }, 
    "white": {}, 
} 

감사 :

client.CreateDocumentQuery<T>(collectionLink, feedOptions).Where(m => m.Status == "Foo"); 

client.CreateDocumentQuery<T>(collectionLink, feedOptions).Where(m => m.Status == "Foo").Where(m => m.Size == 19); 

마지막으로, 나는 문제가 쿼리의 필터 기준을 충족하는 문서가 보장했습니다.

답변

1

이름 필드가 DB의 문서에 없기 때문에 "m.White.Name == null || m.White.Name! = name"확인이 문제가됩니다.

문서를 다음과 같이 편집하면 쿼리에서이를 반환합니다. 이름 필드에 대한 명시적인 널값을 확인하십시오.

{ 
    "id": "1992db52-c9c6-4496-aaaa-f8cb83a8c6b0", 
    "status": "Foo", 
    "size": 19, 
    "black": { 
    "name": "charlie" 
    }, 
    "white": { 
    "name": null 
    }, 
} 
1

다음과 같이 DocumentDB UDF를 사용하여 누락 된 속성을 처리하도록 쿼리를 작성할 수 있습니다. DocumentDB는 JavaScript의 의미를 사용하며 명시 적 null은 JavaScript의 누락 된 속성 ("정의되지 않음")과 다릅니다. 명시 적으로 널 (null)를 확인하는 것은 간단하다 (== 쿼리 같은 널 (null))하지만, 또는 DocumentDB에 존재하지 않을 수도 있습니다 필드를 조회하려면, 먼저 다음 IsDefined에 대한 UDF를 작성해야합니다

function ISDEFINED(doc, prop) { 
    return doc[prop] !== undefined; 
} 

을 그리고 사용 다음과 같은 DocumentDB 쿼리에 포함되어 있습니다.

희망이 있습니다. ! = 및 UDF는 모두 스캔이 필요하므로 성능/스케일이 다른 필터가있는 쿼리에서만 항상 사용하는 것이 좋습니다.

+0

지금 표준 형식 검사 기능으로'IS_DEFINED (expr)'가 보입니다. 위와 지금을 썼을 때 또는 UDF와 IS_DEFINED에 대해 다른 것을 볼 때 그 사이에 추가 되었습니까? –

관련 문제