sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $lookup pipeline match af _id virker ikke

Jeg var også i problemer, mens jeg brugte $lookup med mongoose til at forsøge at matche _id, da min samling gemmer referencen som en String og ikke en ObjectId

Model A:{_id:ObjectId("xxx"), b_id:"eeeee"}

Model B:{_id:ObjectId("eeeee")}

MyCollectionA.aggregate([
   {
      $lookup: {
        from: "collectionb",
        let: {id: "$b_id"},
        pipeline: [{$match: {$expr: {$eq: ["$_id", "$$id"]}}}],
        as: b
      }
])

I dette eksempel er b aldrig udfyldt, da $$id ikke betragtes som et ObjectId

Du skal blot tilføje et projekt for at transformere $$id til et objekt-id og dets funktion

MyCollectionA.aggregate([
   {
      $lookup: {
        from: "collectionb",
        let: {id: "$b_id"},
        pipeline: [
           {$project: {_id: 1, bid: {"$toObjectId": "$$id"}}},
           {$match: {$expr: {$eq: ["$_id", "$bid"]}}}
        ],
        as: b
      }
])

Eller med fremmedField, localField:

MyCollectionA.aggregate([
   {
      $project:{
        _id: 1,
        b_id: {"$toObjectId": "$b_id"}
      }
   },
   {
      $lookup: {
        from: "collectionb",
        localField: "b_id",
        foreignField: "_id",
        as: b
      }
])


  1. Sådan administreres dokumenter i MongoDB

  2. Indlæser MongoDB GetCollection-metoden hele samlingen i RAM eller en reference? C#

  3. Mongoose find element i array

  4. Forsøger med $regex at finde flere felter på samme tid i Mongodb