Sto tentando di convertire una stringa esadecimale nel suo ID oggetto equivalente in una query di aggregazione. Ho provato due diversi metodi:Stringa di progetto di aggregazione MongoDB in ObjectId
db.omvas.aggregate([
{$project:{
EID:{$let: {
vars: {
id: "$EID"
},
in: ObjectId("$$id")
}},
}
},
{$group:{
_id:"$EID"
}
}
]);
e
db.omvas.aggregate([
{$project:{
EID: ObjectId("$EID")
}
},
{$group:{
_id:"$EID"
}
}
]);
continuo a ricevere l'errore "Error: non valida Oggetto ID: lunghezza" utilizzando entrambi i metodi. Ho provato ad aggiungere una stringa letterale al posto della variabile di aggregazione e ottengo un risultato con un ObjectID corretto. Sembra che il valore stringa non sia passato attraverso la funzione ObjectId di Mongo, ma il nome della variabile viene passato come una stringa letterale.
Qualcuno ha qualche idea se quello che sto cercando di realizzare è possibile? C'è qualche magia che mi manca?
Grazie, ha perfettamente senso. Questa particolare query è solo una fase di un flusso di lavoro di reporting. L'ObjectId era necessario in quanto viene utilizzato da query più in basso nella pipeline. Sto ripensando a come funzionano ora e penso di avere un modo migliore di eseguirli. – StevenWarren
Nel mio caso voglio fare una '$ ricerca' dove il campo locale è una rappresentazione String di un' ObjectId' e il campo esterno è un 'ObjectId' effettivo. Qualche idea se fosse possibile con MongoDB 3.2? – Madbreaks
Un modo per aggirarlo sarebbe scrivere uno script che aggiunge un nuovo campo contenente l'id come ObjectId ai documenti nella raccolta. Quindi fai la ricerca $ usando il nuovo campo. –