sql >> Databáze >  >> NoSQL >> MongoDB

Agregát Moongoose $match neodpovídá id

Vaše ids proměnná bude vytvořena z "řetězců" a nikoli z ObjectId hodnoty.

Mongoose "autocasts" řetězcové hodnoty pro ObjectId na jejich správný typ v běžných dotazech, ale to se nestane v agregačním kanálu, jak je popsáno v čísle #1399.

Místo toho musíte provést správné přetypování, abyste mohli ručně zadat:

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

Pak je můžete použít ve fázi procesu:

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

Důvodem je to, že agregační kanály „obvykle“ mění strukturu dokumentu, a proto mongoose nepředpokládá, že se „schéma“ vztahuje na dokument v jakékoli fázi procesu.

Je diskutabilní, že „první“ fáze potrubí, když se jedná o $match etapa by to měla udělat, protože dokument se ve skutečnosti nemění. Ale právě teď se to takhle nestává.

Všechny hodnoty, které mohou být "řetězce" nebo alespoň nemají správný typ BSON, je třeba ručně přetypovat, aby se shodovaly.



  1. Existuje nějaká konvence pro pojmenování kolekce v MongoDB?

  2. příkaz mongo nebyl rozpoznán při pokusu o připojení k serveru mongodb

  3. Mongo se pokouší automaticky připojit k portu 27017 (localhost)

  4. Získejte konkrétní část dokumentu