web-dev-qa-db-fra.com

Comment convertir une chaîne en objectId dans LocalField pour $ lookup Mongodb

Je veux ajouter des collections de jointures en utilisant $lookup Dans mongodb. J'essaye comme ci-dessous

{
 $lookup:{
   from:"User",
   localField:"assignedId",
   foreignField:"_id",
   as:"dataa"}
}

Maintenant, j'ai deux collections

ser contient objectid d'utilisateurs comme "_id" : ObjectId("56ab6663d69d2d1100c074db"),

et Tâches où il contient assignedId comme string"assignedId":"56ab6663d69d2d1100c074db"

Maintenant, lors de l'application de la recherche $ dans les deux collections, cela ne fonctionne pas car les ID ne correspondent pas.

Pour cela, je l'ai recherché sur Google et j'ai trouvé une solution qui

{ $project: { assignedId: {$toObjectId: "$assignedId"} }}

mais cette solution ne fonctionne pas pour moi, cela génère une erreur:

assert: command failed: { "ok" : 0, "errmsg" : "invalid operator '$toObjectId'", "code" : 15999 } : aggregate failed

Veuillez m'aider à résoudre ce problème.

Merci

17
Saurabh Sharma

Ce n'est pas possible dans le pipeline d'agrégation. Il n'existe aucune méthode pour convertir le type. Pouvez-vous changer le type d '"attributId" dans la collection de tâches en ObjectId? Sinon, vous devez le faire dans le code, convertir l'ObjectId en une chaîne et l'utiliser dans une autre requête.

5
HoefMeistert