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

Moongoose агрегат $match не съвпада с идентификатори

Вашите ids променливата ще бъде съставена от "низове", а не от ObjectId стойности.

Mongoose „автоматично предава“ стойности на низове за ObjectId в правилния им тип в редовните заявки, но това не се случва в конвейера за агрегиране, както е описано в брой #1399.

Вместо това трябва да направите правилното прехвърляне, за да въведете ръчно:

ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })

След това можете да ги използвате във вашия етап на тръбопровода:

{ "$match": { "_id": { "$in": ids } } }

Причината е, че конвейерите за агрегиране "обикновено" променят структурата на документа и следователно mongoose не предполага, че "схемата" се прилага към документа във всеки даден етап на конвейера.

Може да се спори, че "първият" етап на конвейера, когато е $match етап трябва да направи това, тъй като наистина документът не се променя. Но точно сега не става така.

Всички стойности, които може да са „низове“ или поне не от правилния тип BSON, трябва да бъдат прехвърлени ръчно, за да съвпадат.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb:вмъкнете, ако не съществува

  2. Проверете текущия брой връзки към MongoDb

  3. Комбинирайте две заявки ИЛИ с И в Mongoose

  4. Spring data mongodb - Опцията „курсор“ е задължителна

  5. Предупреждение при свързване към MongoDB с Node сървър