Как удалить несколько полей в документе mongodb(mongoose odm), но не весь документ

#mongodb #mongoose #mongoose-schema

Вопрос:

Я пытаюсь удалить только определенные поля в своем пользовательском документе MongoDB, но я не думаю использовать модель пользователя.deleteOne({_id:id}) было бы недостаточно, так как это удалило бы весь документ, а это не то, что я хочу.

 {
    "_id": "12345678" ,
    "maidenName": null,
    "createdAt":  "2021-09-16T09:11:55.199Z" ,
    "email": "287983@gmail.com",
    "firstName": "iam1234",
    "lastName": "test14",
    "profile": "hello-world.com",
    "uid": "SKkZZ3a",
    "skills": []
}
 

Я пытался сделать это UserModel.updateOne({_id:id},{$unset:{email: 1, firstName: 1}});
Этот запрос возвращает

 {
  n: 0,
  nModified: 0,
  opTime: {
    ts: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1631832363 },
    t: 24
  },
  electionId: 7fffffff0000000000000018,
  ok: 1,
  '$clusterTime': {
    clusterTime: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1631832363 },
    signature: { hash: [Binary], keyId: [Long] }
  },
  operationTime: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1631832363 }
}
 

Я понятия не имею, что это такое! как лучше всего это сделать?

Ответ №1:

Ваш код работает, и это правильный способ сделать это.
(вам не нужно ставить 1, любое значение будет в порядке, например, даже «»)

Тестовый код здесь

Это говорит вам о том, что произошло

  • n: 0 => соответствующие документы не найдены
  • Изменено: 0 => документы не обновлялись

Я думаю, что это фильтр, возможно, простая ошибка, например, неправильный тип идентификатора? Попробуйте найти в одиночку, чтобы посмотреть, сможете ли вы его найти