【问题标题】:MongoInvalidArgumentError: Update document requires atomic operatorsMongoInvalidArgumentError:更新文档需要原子运算符
【发布时间】:2021-08-18 17:46:15
【问题描述】:

我正在学习关于 MongoDB 的课程。下面是我在一个名为“flightData”的集合中的文档列表。以下是 find 查询的结果:

flights> db.flightData.find()
[
  {
    _id: ObjectId("611aaa1c4a0269583c8d81b0"),
    aircraft: 'AirBus A308',
    departingFrom: 'Mumbai',
    arrivalStation: 'Moscow',
    departureDate: '24/09/2021',
    departureTime: '01:44',
    arrivingAt: '12:00',
    isOneWay: false,
    status: {
      description: 'on time',
      lastUpdated: 'One hour ago',
      details: { contact: 'John Doe' }
    }
  },
  {
    _id: ObjectId("611aaa554a0269583c8d81b1"),
    aircraft: 'AirBus A308',
    departingFrom: 'Kolkata',
    arrivalStation: 'Stockholm',
    departureDate: '24/09/2021',
    departureTime: '01:44',
    arrivingAt: '12:00',
    isOneWay: false,
    status: {
      description: 'on time',
      lastUpdated: 'One hour ago',
      details: { contact: 'Cool User' }
    }
  }
]

当他们通过类似于下面的示例显示 update 和 updateMany 之间的区别时:

flights> db.flightData.update({_id:ObjectId("611aaa554a0269583c8d81b1")},{"delayed":false})

在讲座中它有效。但是,就我而言,它会引发以下错误:

MongoInvalidArgumentError:更新文档需要原子操作符

有人可以解释一下这种行为吗?我的版本或其他不支持它吗?

我正在使用 MongoDB 5.0.2、mongosh 1.0.5

【问题讨论】:

  • 你的课程使用的是 mongosh 吗?
  • @D.SM,是的。它使用的是旧外壳。

标签: mongodb mongo-shell


【解决方案1】:

如果您想将“延迟”字段添加到文档中,您将需要使用 $set 运算符

db.flightData.update({_id:ObjectId("611aaa554a0269583c8d81b1")},{$set:{"delayed":false}})

如果你想替换文档,你应该使用replaceOne

在 mongodb 3.2 中添加了此命令,以避免在您打算更新字段时意外替换整个文档

【讨论】:

  • 您建议使用 upsert 命令。有问题的普通更新命令(没有 $set 运算符)应该用作替换命令。
猜你喜欢
  • 2022-12-14
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2020-06-11
  • 1970-01-01
相关资源
最近更新 更多