在Mongo中提供了以下文档:

[
  {
  "_id": "1",
  "prices": {
    "2024-01-01 00:00:00": "11",
    "2024-01-02 00:00:00": "22",
    "2024-01-03 00:00:00": "33"
    },
  }
  {
  "_id": "2",
  "prices": {
    "2024-01-03 00:00:00": "33",
    "2024-01-04 00:00:00": "44",
    "2024-01-05 00:00:00": "55"
    }
  }
]

我需要支持两项操作:

  • 按日期更新价格元素(例如,设置"$.prices.2024-01-01 00:00:00" = 100).
  • 删除prices对象中具有关键日期条件的所有元素(例如,删除其中$.prices.key <= "2024-01-01 00:00:00"的所有元素).

我不确定如何使用Mongo高效地进行第二次操作.有什么主意吗?

推荐答案

对于第二个问题,一种 Select 是使用UPDATE WITH PIELINE,arrayToObject$objectToArray:

db.collection.update(
  {},
  [{$set: {
      prices: {
        $arrayToObject: {
          $filter: {
            input: {$objectToArray: "$prices"},
            cond: {$gt: [{$toDate: "$$this.k"}, date]} // you can use string if you want
          }
        }
      }
  }}],
  {multi: true}
)

看看它在mongoDB playground号公路上是如何工作的

Mongodb相关问答推荐

Mongo如何找到字段排除特殊字符

将消息流式传输到WebSocket

在mongdob中按子文档筛选不起作用

如何用Python和MongoDB找到单据字段的最大值?

使用Go的Mongo驱动程序,从MongoDB文档中获取元素并更新其值需要帮助

在延迟函数中重用 context.WithTimeout

有谁知道这个错误的修复方法(TypeError: Cannot assign to read only property ‘map’ of object '#')

为什么一个 mongodb 副本集需要奇数个投票 node ?

如何将 json 字符串编组到 bson 文档以写入 MongoDB?

Java MongoDB FindOne 获取最后插入的记录

具有最佳插入/秒性能的数据库?

Mongo 重启错误 -- /var/run/mongodb/mongod.pid 存在

在 MongoDb 中查询小于 NOW 的日期时间值

Express 无法 PUT/DELETE 方法.出了什么问题?

如何按季度分组日期?

Mongoose.js 通过一个 connect() 调用创建到 MongoDB 的多个连接

用于嵌入式集合的 MongoDB 首选模式.文档与数组

PyMongo 中的警告消息:count is deprecated

show dbs 给出Not Authorized to execute command错误

MongoError:Can't extract geo keys from object