На самом деле в документации для $type
есть «gotcha», в частности, о массивах:
При применении к массивам тип $ соответствует любому внутреннему элементу то есть указанного типа. Без проекции это означает, что весь массив будет соответствовать, если какой-либо элемент имеет правильный тип. С проекцией результаты будут включать только те элементы запрашиваемого типа.
blockquote>Таким образом, это означает, что вместо того, чтобы определять, находится ли сам элемент в массиве, то, что на самом деле тестируется, является «внутренний элемент» массива, чтобы увидеть, какой он тип.
Теперь сама документация предлагает этот тест JavaScript с помощью
$where
:.find({ "$where": "return Array.isArray(this.author)" })
Но я думаю, что это довольно ужасно, поскольку есть лучший способ.
Трюк находится в «точечной нотации» , где вы запрашиваете индексный элемент
0
массива к$exists
.find({ "author.0": { "$exists": true } })
Это всего лишь основной случай, если элемент «0» существует, тогда поле присутствует, и поэтому данные являются массивом.
Как только вы понимаете эту логическую предпосылку, это довольно простой тест. Единственное, что не может сравниться с этим, это «действительно пустой» массив, и в этом случае вы можете вернуться к альтернативе JavaScript, если это необходимо. Но это может фактически использовать индекс, поэтому было бы предпочтительно использовать последнюю форму.
Если Вы заинтересовали этим, заполните отчет об ошибках, Дубликат/5883058:
Заголовок: UIProgressView setProgress:(float)value animated:(BOOL)animated
Описание проблемы: UIProgressView should
имеют setProgress:(float)value animated:(BOOL)animated
функция как UISlider
, чтобы быть в состоянии анимировать прогресс.