Всъщност има "разбирам" в документацията за $type
конкретно за масивите:
Когато се прилага към масиви, $type съответства на всеки вътрешен елемент, който е от посочения тип. Без проекция това означава, че целият масив ще съвпада, ако някой елемент има правилния тип. С проекцията резултатите ще включват само тези елементи от искания тип.
Така че това означава, че вместо да се установи дали „самият елемент“ е в масива, това, което всъщност се тества, е „вътрешният елемент“ на масива, за да се види какъв тип е той.
Сега самата документация предлага този JavaScript тест с $where
:
.find({ "$where": "return Array.isArray(this.author)" })
Но мисля, че това е доста ужасно, тъй като има по-добър начин.
Номерът е в "точкова нотация", където искате 0
индексен елемент на масива до $exists
.find({ "author.0": { "$exists": true } })
Което е просто основният случай, че ако елементът "0th" съществува, тогава полето е налице и следователно данните са масив.
След като разберете тази логическа предпоставка, това е доста прост тест. Единственото нещо, което не може да бъде съпоставено с това, е "наистина празен" масив, в който случай можете да се върнете към алтернативата на JavaScript, ако е необходимо. Но това всъщност може да използва индекс, така че би било за предпочитане да се използва последната форма.