首页 > 解决方案 > 无法使用 findOneAndUpdate 更新 MongoDB 中的记录

问题描述

我正在使用 Mongoose 更新 Announcement 记录,定义如下:

const { DateTime } = require('luxon');

const Schema = new mongoose.Schema({
  title: String,
  description: String,
  date: {
    type: Date,
    set: (dt) => dt.toJSDate(),
    get: (d) => DateTime.fromJSDate(d),
  },
  club: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Club',
  },
});

我正在这个函数中执行更新操作

exports.update = async (id, params) => {
  console.log(params)
  await Announcement.findOneAndUpdate({ _id: id }, params, {
    upsert: true,
    useFindAndModify: false,
  });

  return "exports.get(id)";
};

但是,运行 Announcement.findOneAndUpdate 时出现错误:

$set' is empty. You must specify a field like so: {$set: {<field>: ...}}

这是参数的样子:

{
  title: 'Name!',
  description: 'Description!',
  date: DateTime {
    ts: 1601524800000,
    _zone: LocalZone {},
    loc: Locale {
      locale: 'en-US',
      numberingSystem: null,
      outputCalendar: null,
      intl: 'en-US',
      weekdaysCache: [Object],
      monthsCache: [Object],
      meridiemCache: null,
      eraCache: {},
      specifiedLocale: null,
      fastNumbersCached: null
    },
    invalid: null,
    weekData: null,
    c: {
      year: 2020,
      month: 10,
      day: 1,
      hour: 0,
      minute: 0,
      second: 0,
      millisecond: 0
    },
    o: -240,
    isLuxonDateTime: true
  },
  club: '99cb91bdc3464f14678934ca'
}

我知道所有 ObjectId 都是有效的,因为我已经从 Mongo shell 测试过它们。但是,我无法弄清楚为什么我无法在 Announcement 记录上运行 findOneAndUpdate。

标签: javascriptmongodbmongoose

解决方案


推荐阅读