sql >> Database >  >> NoSQL >> MongoDB

MongoDB $ lookup-pijplijnovereenkomst door _id werkt niet

Ik had ook problemen toen ik $lookup met mangoest gebruikte om te proberen _id te matchen, aangezien mijn verzameling de referentie opslaat als een string en niet als een 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
      }
])

In dit voorbeeld wordt b nooit ingevuld omdat $$id niet wordt beschouwd als een ObjectId

Voeg gewoon een project toe om $$id om te zetten in een objectId en het werkt

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

Of met ForeignField, localField:

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


  1. Kan geen verbinding maken met Mongo Cloud mongodb Database in Golang op Ubuntu

  2. mongoimport Docker Mislukt:fout bij het verbinden met de db-server:geen bereikbare servers

  3. gebruik mongoose model.find() om alle invoer van slechts 1 veld te krijgen

  4. MongoDB $stdDevPop