user12983086
user12983086

Reputation:

Remove a particular field for all documents in a collection using aggregation in mongoDB

How to Remove a particular value for all records in the collection using aggregation :

Have a collection with data :

[
 {
    _id: "bmasndvhjbcw",
    name: "lucas",
    occupation: "scientist",
    present_working:true,
    age: 55,
    location: "texas"

  },
  {
    _id: "bmasndvhjbcx",
    name: "mark",
    occupation: "scientist",
    age: 45,
    present_working:false,
    location: "texas"
  },
  {
    _id: "bmasndvhjbcq",
    name: "cooper",
    occupation: "physicist",
    age: 69,
    location: "texas",
    present_working:false
  }
]

Remove the rows in records for which there is present_working:false. Data need not be removed in the database, it should be only modified in the aggregation pipeline

Expected output after removing only present_working:false and present_working:false should be kept in database. :

[
 {
    _id: "bmasndvhjbcw",
    name: "lucas",
    occupation: "scientist",
    present_working:true,
    age: 55,
    location: "texas"
  },
  {
    _id: "bmasndvhjbcx",
    name: "mark",
    occupation: "scientist",
    age: 45,
    location: "texas"
  },
  {
    _id: "bmasndvhjbcq",
    name: "cooper",
    occupation: "physicist",
    age: 69,
    location: "texas"
  }
]

MongoDB version: 4.0

Upvotes: 1

Views: 177

Answers (1)

mickl
mickl

Reputation: 49945

You can use $$REMOVE as part of $project:

db.collection.aggregate([
    {
        $project: {
            _id: 1,
            name: 1,
            occupation: 1,
            age: 1,
            location: 1,
            present_working: { $cond: [ { $eq: [ "$present_working", false ] }, "$$REMOVE", "$present_working" ] }
        }
    }
])

Mongo Playground

Upvotes: 1

Related Questions