Mongo $ne and $ifNull while projection

PHOTO EMBED

Fri Mar 01 2024 04:29:49 GMT+0000 (Coordinated Universal Time)

Saved by @CodeWithSachin ##jupyter #aggregation #mongodb

[
    {
      "$lookup": {
        "from": "Assessment",
        "localField": "assessmentId",
        "foreignField": "_id",
        "as": "assessment"
      }
    },
    {
      "$unwind": {
        "path": "$assessment",
        "preserveNullAndEmptyArrays": true
      }
    },
    {
      "$match": {
        "$and": [
          {
            "assessmentId": {
              "$oid": "622072b1aaeb4e5955319304"
            },
            "endCode": {
              "$ne": ""
            }
          }
        ]
      }
    },
   {
  "$project": {
    "_id": 1,
    "name": {
      "$cond": {
        "if": { "$ifNull": ["$assessmentType", false] },
        "then": "$assessmentType",
        "else": "IDRS"
      }
    },
    "assessmentId": "$_id",
    "ok": "$assessment.type",
    "createdAt": 1
  }
}
,
   {
      "$sort": {
        "createdAt": -1
      }
    }

  ]
content_copyCOPY

I see that you are having issues with the projection of the "name" field. The problem may be related to the $ne condition inside the $cond expression. When using $ne with an array, it might not behave as expected. Let's update the $project stage to use $ifNull instead of $ne for checking the existence of the "assessmentType" field. Here's the modified $project stage: project("createdAt", "assessmentType", "assessment.type") .andExpression("ifNull(assessmentType, 'IDRS')").as("name") .and("_id").as("assessmentId") .and("createdAt").as("createdAt")

http://34.74.16.180:3000/question#eyJkYXRhc2V0X3F1ZXJ5Ijp7InR5cGUiOiJuYXRpdmUiLCJuYXRpdmUiOnsiY29sbGVjdGlvbiI6InVzZXJBc3Nlc3NtZW50TWFwcGluZyIsInF1ZXJ5IjoiW1xuICAgIHtcbiAgICAgIFwiJGxvb2t1cFwiOiB7XG4gICAgICAgIFwiZnJvbVwiOiBcIkFzc2Vzc21lbnRcIixcbiAgICAgICAgXCJsb2NhbEZpZWxkXCI6IFwiYXNzZXNzbWVudElkXCIsXG4gICAgICAgIFwiZm9yZWlnbkZpZWxkXCI6IFwiX2lkXCIsXG4gICAgICAgIFwiYXNcIjogXCJhc3Nlc3NtZW50XCJcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIFwiJHVud2luZFwiOiB7XG4gICAgICAgIFwicGF0aFwiOiBcIiRhc3Nlc3NtZW50XCIsXG4gICAgICAgIFwicHJlc2VydmVOdWxsQW5kRW1wdHlBcnJheXNcIjogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgXCIkbWF0Y2hcIjoge1xuICAgICAgICBcIiRhbmRcIjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiYXNzZXNzbWVudElkXCI6IHtcbiAgICAgICAgICAgICAgXCIkb2lkXCI6IFwiNjIyMDcyYjFhYWViNGU1OTU1MzE5MzA0XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImVuZENvZGVcIjoge1xuICAgICAgICAgICAgICBcIiRuZVwiOiBcIlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcbiAgIHtcbiAgXCIkcHJvamVjdFwiOiB7XG4gICAgXCJfaWRcIjogMSxcbiAgICBcIm5hbWVcIjoge1xuICAgICAgXCIkY29uZFwiOiB7XG4gICAgICAgIFwiaWZcIjogeyBcIiRpZk51bGxcIjogW1wiJGFzc2Vzc21lbnRUeXBlXCIsIGZhbHNlXSB9LFxuICAgICAgICBcInRoZW5cIjogXCIkYXNzZXNzbWVudFR5cGVcIixcbiAgICAgICAgXCJlbHNlXCI6IFwiSURSU1wiXG4gICAgICB9XG4gICAgfSxcbiAgICBcImFzc2Vzc21lbnRJZFwiOiBcIiRfaWRcIixcbiAgICBcIm9rXCI6IFwiJGFzc2Vzc21lbnQudHlwZVwiLFxuICAgIFwiY3JlYXRlZEF0XCI6IDFcbiAgfVxufVxuLFxuICAge1xuICAgICAgXCIkc29ydFwiOiB7XG4gICAgICAgIFwiY3JlYXRlZEF0XCI6IC0xXG4gICAgICB9XG4gICAgfVxuXG4gIF0iLCJ0ZW1wbGF0ZS10YWdzIjp7fX0sImRhdGFiYXNlIjoyfSwiZGlzcGxheSI6InRhYmxlIiwidmlzdWFsaXphdGlvbl9zZXR0aW5ncyI6e319