Ich versuche, eine hexadezimale Zeichenfolge in eine äquivalente ObjectID in einer Aggregationsabfrage zu konvertieren. Ich habe versucht, zwei verschiedene Methoden:MongoDB-Aggregationsprojekt-String zu ObjectId
db.omvas.aggregate([
{$project:{
EID:{$let: {
vars: {
id: "$EID"
},
in: ObjectId("$$id")
}},
}
},
{$group:{
_id:"$EID"
}
}
]);
und
db.omvas.aggregate([
{$project:{
EID: ObjectId("$EID")
}
},
{$group:{
_id:"$EID"
}
}
]);
Ich erhalte die Fehlermeldung "Fehler: ungültige Objekt-ID: Länge" entweder-Methode. Ich habe das Hinzufügen einer Literal-Zeichenfolge anstelle der Aggregationsvariablen getestet und erhalte ein Ergebnis mit einer richtigen ObjectID. Es scheint, dass der String-Wert nicht an die ObjectId-Funktion von Mongo übergeben wird, sondern dass der Variablenname als Literal-String übergeben wird.
Hat jemand eine Idee, wenn das, was ich zu erreichen versuche, möglich ist? Gibt es Magie, die ich vermisse?
Danke, das macht vollkommen Sinn. Diese bestimmte Abfrage ist nur eine Stufe in einem Berichtsworkflow. Die ObjectId war notwendig, da sie von Abfragen weiter unten in der Pipeline verwendet wird. Ich überlege, wie sie jetzt arbeiten und denke, dass ich sie besser ausführen kann. – StevenWarren
In meinem Fall möchte ich eine '$ lookup' machen, wobei das lokale Feld eine String-Repräsentation einer' ObjectId' ist und das fremde Feld eine tatsächliche 'ObjectId' ist. Irgendeine Idee, wenn das mit MongoDB 3.2 möglich ist? – Madbreaks
Eine Möglichkeit wäre, ein Skript zu schreiben, das den Dokumenten in der Sammlung ein neues Feld hinzufügt, das die ID als ObjectId enthält. Dann führen Sie den $ Lookup mit dem neuen Feld aus. –