【问题标题】:How to remove a field from all documents in a collection using Mongoose? [duplicate]如何使用 Mongoose 从集合中的所有文档中删除字段? [复制]
【发布时间】:2021-04-04 01:19:02
【问题描述】:

我有一个存储在 MongoDB 数据库中的文档集合,如下所示:

[
  {
    _id: 5fe72e02b237503088b8889b,
    code: '000001403',
    name: 'John',
    date: 2018-12-01T21:00:00.000Z,
    __v: 1
  },
  {
    _id: 5fe72e02b237503088b8889c,
    code: '000001404',
    name: 'Michael',
    date: 2018-12-01T21:00:00.000Z,
    __v: 1
  }
]

我需要从集合中的所有文档中删除“code”字段并保留文档,即我需要以下结果:

[
  {
    _id: 5fe72e02b237503088b8889b,
    name: 'John',
    date: 2018-12-01T21:00:00.000Z,
    __v: 1
  },
  {
    _id: 5fe72e02b237503088b8889c,
    name: 'Michael',
    date: 2018-12-01T21:00:00.000Z,
    __v: 1
  }
]

我还从模型中删除了该字段:

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const ItemSchema = new Schema({
  // code: String,
  name: String,
  date: {
    type: Date,
    default: Date.now
  },
});

module.exports = mongoose.model('Item', ItemSchema);

不知道这种情况下是否可以使用aggregation$unset的方法,还是有别的方法?

谢谢。

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    您可以像这样达到预期的效果:

    首先您必须将“代码”字段添加回您的架构,然后运行以下代码。

    之后,您可以再次从架构中删除代码字段。

    const res = await Item.updateMany({}, {$unset: {"code": 1}});
    
    res.n; // Number of documents matched
    res.nModified; // Number of documents modified
    

    Item.updateMany({}, {$unset: {"code": 1}}).then(res => {
      console.log(res.n); // Number of documents matched
      console.log(res.nModified); // // Number of documents modified
    }).catch(err => console.log(err));
    

    【讨论】:

    • 没用
    • 在控制台中显示 0 两次
    • 尝试再次将代码字段添加回 Schema,然后尝试取消设置,看看它是否有效。
    • 在取消设置之前将该字段添加回模式为我解决了同样的问题。谢谢@Abbas!
    • 不客气!我很高兴能帮上忙!编码愉快!
    猜你喜欢
    • 2015-03-24
    • 1970-01-01
    • 2019-03-20
    • 2014-07-28
    • 2022-06-23
    • 2020-09-03
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多