Удалить определенное поле для всех документов в коллекции, используя агрегацию MongoDB - PullRequest
1 голос
/ 08 апреля 2020

Как удалить определенное значение для всех записей в коллекции с помощью агрегации:

Иметь коллекцию с данными:

[
 {
    _id: "bmasndvhjbcw",
    name: "lucas",
    occupation: "scientist",
    present_working:true,
    age: 55,
    location: "texas",
    date:2019-11-25T10:49:36.534+00:00

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

Удалить строки в записях, для которых есть date:null. Данные не нужно удалять в базе данных, их следует изменять только в конвейере агрегации

Ожидаемый вывод после удаления только date:null:

[
 {
    _id: "bmasndvhjbcw",
    name: "lucas",
    occupation: "scientist",
    present_working:true,
    age: 55,
    location: "texas",
    date:2019-11-25T10:49:36.534+00:00

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

Версия MongoDB: 4.0

1 Ответ

1 голос
/ 08 апреля 2020

Вы можете использовать $ ifNull оператор & $$REMOVE, чтобы сделать это:

db.collection.aggregate([
  {
    $addFields: {
      date: {
        $ifNull: [
          "$date",
          "$$REMOVE"
        ]
      }
    }
  }
])

Тест: MongoDB-Playground

...