sql >> Databáze >  >> NoSQL >> MongoDB

Shoda kanálu $lookup MongoDB podle _id nefunguje

Také jsem měl potíže, když jsem pomocí $lookup s mongoose pokoušel najít shodu _id, protože moje sbírka ukládá odkaz jako řetězec a ne 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
      }
])

V tomto příkladu b není nikdy vyplněno, protože $$id není považováno za ObjectId

Stačí přidat projekt pro transformaci $$id v objectId a jeho fungování

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

Nebo pomocí ForeignField, localField:

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


  1. jak zřetězit různé výsledky mongoose do jednoho pole JSON pro zobrazení na DataTable?

  2. RuntimeError:Úloha připojená k jiné smyčce

  3. Průsečík indexu MongoDB

  4. Jak nastavit handlery v RedMQ z událostí vyvolaných v mé doméně