【问题标题】:How push a new value into an array with a specific key in MongoDB?如何将新值推送到 MongoDB 中具有特定键的数组中?
【发布时间】:2020-08-30 16:02:43
【问题描述】:

我在 MongoDB 的“Price”数组中存储了各种商品的数百万条价格变化数据,如下所示:

{ 
  "item" : "I1",
  "Price" : [
         {"k": "2020-07-01", "v": [{"t":t1, "v":1000}, {"t":t2, "v":1500}, {"t":t3, "v":1350}, ..]},
         {"k": "2020-07-02", "v": [{"t":t1, "v":1200}, {"t":t2, "v":1250}, {"t":t3, "v":1050}, ..]},         
         ...
     ]
 },
 { 
   "item" : "I2",
   "Price" : [
         {"k": "2020-07-01": [{"t":t1, "v":1025}, {"t":t2, "v":1200}, {"t":t3, "v":1400}, ..]},
         {"k": "2020-07-02": [{"t":t1, "v":1560}, {"t":t2, "v":1050}, {"t":t3, "v":1350}, ..]},
         ...
     ]
 }

我只是想知道是否有任何方法可以在 Price 数组的元素中使用特定键推送新的时间价格,例如 {"t": t', "v": 2000},例如 "k": "2020 -07-01”? 项目“I1”的结果应如下所示:

{ 
  "item" : "I1",
  "Price" : [
         {"k": "2020-07-01", "v": [{"t":t1, "v":1000}, {"t":t2, "v":1500}, {"t":t3, "v":1350}, .., {"t":t', "v":2000}]},
         {"k": "2020-07-02", "v": [{"t":t1, "v":1200}, {"t":t2, "v":1250}, {"t":t3, "v":1050}, ..]},         
         ...
     ]
 },

谢谢

【问题讨论】:

    标签: arrays mongodb mongodb-query aggregation-framework


    【解决方案1】:

    是的,您可以尝试updateMany() 和位置运算符$

    db.collection.updateMany(
        { 
          "item": "I1",
          "Price.k": "2020-07-01" 
        },
        {
            $push: {
                "Price.$.v": {
                    "t": "t4",
                    "v": 2000
                }
            }
        }
    )
    

    【讨论】:

    • 执行您的代码时出现“发生批量操作错误”错误!你知道问题出在哪里吗? @turivishal
    • 您能否提供更多详细信息。您在哪里以及如何展示此查询?
    • 我使用 pymongo 执行代码:UpdateOne({where_statement}, {$push:{...}}, upsert=True) @turivishal
    • 我也用bulk_write写了几个更新。问题在于 Price.$.v!当我删除 $ 它工作。但是,结果不是我需要的。 @turivishal
    • 我确定回答的查询是正确的,你可以在 mongo shell 中检查,问题来自于 pymongo 批量写入,看这个question。抱歉,我不了解python,您可以为此提出新问题。
    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2016-11-17
    • 2017-09-19
    相关资源
    最近更新 更多