2015-08-15 1 views
1

«ElemMatch» проверяет, что по крайней мере один элемент массива соответствует запросу. Я просто хочу, чтобы проверить все элементы (например, Enumerable.All в LINQ)В mongoDB, как определить, удовлетворяют ли все элементы последовательности

Query.ElemMatch("Prices", Query.GTE("Value", criteria.MinPrice)) 

любое предложение будет принято. (mongo script, ...)

ответ

1

Вместо проверки того, что каждый элемент соответствует указанному условию, вы можете использовать Query.Not, чтобы гарантировать, что ни один из них не выполнит противоположное условие.

например. Там, где все значения не менее criteria.MinPrice

Query.Not(Query.ElemMatch("Prices", Query.LT("Value", criteria.MinPrice))); 

Этот подход будет работать только если у вас есть последовательная схема, где каждый элемент Prices всегда имеет Value, а Prices, которые не имеет Value не провалите проверить.

Если Prices может быть пустым вы можете исключить эти документы

Query.And(
    Query.Exists("Prices.0"), 
    Query.Not(Query.ElemMatch("Prices", Query.LT("Value", criteria.MinPrice))) 
); 
+0

Bravo, отлично работает;) – Soren