如何使用 Mongoose 从集合中的所有文档中删除字段?

Kit*_*ten 4 javascript mongoose mongodb node.js express

我有一个存储在 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
  }
]
Run Code Online (Sandbox Code Playgroud)

我需要从集合中的所有文档中删除“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
  }
]
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)

我不知道在这种情况下是否可以使用aggregation$unset方法,或者还有其他方法吗?

谢谢。

Abb*_*bas 8

您可以像这样实现所需的结果:

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

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

const res = await Item.updateMany({}, {$unset: {"code": 1}});

res.n; // Number of documents matched
res.nModified; // Number of documents modified
Run Code Online (Sandbox Code Playgroud)

或者

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));
Run Code Online (Sandbox Code Playgroud)

  • 尝试再次将代码字段添加回架构,然后尝试取消设置并查看它是否有效。 (5认同)