无法对时间序列集合执行非多重更新

Gha*_*han 5 time-series mongodb mongodb-query

您好,我正在使用新的 Timeseries mongodb 集合。我的mongodb版本是5.0.6。我正在关注这个教程。我创建了一个这样的集合。

   db.createCollection("ticker", {
     timeseries: {
        timeField: "time",
        metaField: "metadata",
    },
});
Run Code Online (Sandbox Code Playgroud)

我像这样插入了示例文档。

db.ticker.insertOne({
 time: ISODate("20210101T01:00:00"),
 symbol: "BTC-USD",
 price: 34114.1145,
 metadata: { a: ""}
});
Run Code Online (Sandbox Code Playgroud)

当我尝试更新元数据字段时,它给出了上述错误。正如这里提到的,您只能更新元字段,但它仍然给出上述错误。这是更新代码

db.ticker.update({ "metadata.a": "a" }, { $set: { "metadata.d": "a" } })

write failed with error: {
    "nMatched" : 0,
    "nUpserted" : 0,
    "nModified" : 0,
    "writeError" : {
        "code" : 72,
        "errmsg" : "Cannot perform a non-multi update on a time-series collection"
    }
}
Run Code Online (Sandbox Code Playgroud)

需要帮助我做错了什么。

Nen*_*vic 3

尝试添加{ multi: true }配置。

如果您检查文档,更新时间序列集合仍然存在一些限制。

更新命令必须满足以下要求:

  • 查询可能仅匹配metaField 字段值。
  • update命令只能修改metaField字段值。
  • 更新必须使用仅包含更新运算符表达式的更新文档来执行。
  • 更新命令可以不限制要更新的文档的数量。您必须使用带有 multi: true 或 updateMany() 方法的更新命令。
  • update 命令可能不会设置 upsert: true。