Arrays 在MongoDB中,如何使用特定键将新值推送到数组中?
我在MongoDB中的“价格”数组中存储了数百万个不同项目的价格变化数据,如下所示:Arrays 在MongoDB中,如何使用特定键将新值推送到数组中?,arrays,mongodb,mongodb-query,aggregation-framework,Arrays,Mongodb,Mongodb Query,Aggregation Framework,我在MongoDB中的“价格”数组中存储了数百万个不同项目的价格变化数据,如下所示: { "item" : "I1", "Price" : [ {"k": "2020-07-01", "v": [{"t":t1, "v":1000}, {"t":t2, "v":1500}
{
"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数组的元素中使用一个特定的键,例如“k”:“2020-07-01”,来推送一个新的时间价格,例如{“t”:t',“v”:2000}?
项目“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}, ..]},
...
]
},
谢谢是的,您可以尝试
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)执行代码@turivishalI还使用bulk_write编写多个更新。问题在于价格。$.v!当我删除$时,它就工作了。然而,结果不是我所需要的@图里维沙尔