2014-11-18 6 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))); 

Я тестировал более простые запросы, такие как нижеследующие, которые возвращают результаты, которые я ожидаю.

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

Наконец, я обеспечил есть документы, которые соответствуют критериям фильтра сомнительного запроса по:

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

Благодарности.

ответ

1

Выключает проверку «m.White.Name == null || m.White.Name! = Name», потому что поле «Имя» не существует в документе в БД.

Когда документ редактируется следующим образом, запрос возвращает его. Обратите внимание на явное значение null для поля Name.

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

Запрос может быть записан для обработки отсутствующих свойств с использованием DocumentDB UDF следующим образом. DocumentDB использует семантику JavaScript, а явный null отличается от отсутствующего свойства («undefined») в JavaScript. Чтобы проверить наличие явного нуля просто (== NULL, как ваш запрос), но для запроса поля, которые могут или не могут существовать в DocumentDB, вы должны сначала создать UDF для ISDEFINED:

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

И затем использовать это в запросе DocumentDB:

Надеюсь, это поможет. Обратите внимание, что поскольку! = И UDFs требуют сканирования, хорошая производительность для производительности/масштабирования всегда используется только в запросах с другими фильтрами.

+0

Я вижу 'IS_DEFINED (expr)' теперь как функцию проверки стандартного типа. Было ли это добавлено между тем, когда вы написали выше и сейчас, или есть что-то другое в ваших UDF и IS_DEFINED, которые я не вижу? –

Смежные вопросы