MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB Съпоставете ли масив с $type?

Всъщност има "разбирам" в документацията за $type конкретно за масивите:

Когато се прилага към масиви, $type съответства на всеки вътрешен елемент, който е от посочения тип. Без проекция това означава, че целият масив ще съвпада, ако някой елемент има правилния тип. С проекцията резултатите ще включват само тези елементи от искания тип.

Така че това означава, че вместо да се установи дали „самият елемент“ е в масива, това, което всъщност се тества, е „вътрешният елемент“ на масива, за да се види какъв тип е той.

Сега самата документация предлага този JavaScript тест с $where :

.find({ "$where": "return Array.isArray(this.author)" })

Но мисля, че това е доста ужасно, тъй като има по-добър начин.

Номерът е в "точкова нотация", където искате 0 индексен елемент на масива до $exists

.find({ "author.0": { "$exists": true } })

Което е просто основният случай, че ако елементът "0th" съществува, тогава полето е налице и следователно данните са масив.

След като разберете тази логическа предпоставка, това е доста прост тест. Единственото нещо, което не може да бъде съпоставено с това, е "наистина празен" масив, в който случай можете да се върнете към алтернативата на JavaScript, ако е необходимо. Но това всъщност може да използва индекс, така че би било за предпочитане да се използва последната форма.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB не може да стартира сървър:Машината за съхранение по подразбиране 'wiredTiger' не е налична с тази версия на mongod

  2. Вземете името на месеца от дата в SQL

  3. Йерархични заявки с Mongo с помощта на $graphLookup

  4. MapReduce с MongoDB наистина, много бавно (30 часа срещу 20 минути в MySQL за еквивалентна база данни)

  5. Случаи на използване за NoSQL