sql >> Databasteknik >  >> NoSQL >> MongoDB

Moongoose sammanlagda $match matchar inte id:n

Dina ids variabel kommer att konstrueras av "strängar" och inte ObjectId värden.

Mongoose "autocasts" strängvärden för ObjectId till sin korrekta typ i vanliga frågor, men detta händer inte i aggregeringspipelinen, som beskrivs i nummer #1399.

Istället måste du göra rätt gjutning för att skriva manuellt:

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

Sedan kan du använda dem i ditt pipelinestadium:

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

Anledningen är att aggregeringspipelines "vanligtvis" ändrar dokumentstrukturen, och därför gör mongoose ingen presumtion att "schemat" gäller dokumentet i ett givet pipelinestadium.

Det kan hävdas att det "första" pipelinesteget när det är en $match scenen bör göra detta, eftersom dokumentet faktiskt inte ändras. Men just nu är det inte så det händer.

Alla värden som kan vara "strängar" eller åtminstone inte rätt BSON-typ måste castas manuellt för att matcha.



  1. Finns det något sätt att skriva pyspark dataframe till azure cache för redis?

  2. Argument som skickas in måste vara en enda sträng på 12 byte

  3. Varför gjordes bara en anslutning till redis i detta givna program?

  4. Mongodb samlar sortering och gräns inom gruppen