想要在 Mongo 中更新数组对象值的数组

Posted

技术标签:

【中文标题】想要在 Mongo 中更新数组对象值的数组【英文标题】:Want to Update Array of Array Object Value in Mongo 【发布时间】:2015-12-20 10:18:57 【问题描述】:

我有以下 MongoDB 文档:


"_id": ObjectId(),
"sku": "V4696-DR-V33",
"options": [
    
        "sku": "8903689984338",
        "stores": [
            
                "code": "AND1",
                "zipcode": "110070",
                "inventory": -1000
            ,
            
                "code": "AND2",
                "zipcode": "201010",
                "inventory": -1000
            ,
            
                "code": "AND3",
                "zipcode": "411001",
                "inventory": -1000
            ,
            
                "code": "AND4",
                "zipcode": " 700020",
                "inventory": -1000
            ,
            
                "code": "AND5",
                "zipcode": "110015",
                "inventory": -1000
            
        ],
        "price": 2199,
        "_id": ObjectId(),
        "size": "14"
    ,
    
        "sku": "1742564789",
        "stores": [
            
                "code": "AND1",
                "zipcode": "110070",
                "inventory": -1000
            ,
            
                "code": "AND2",
                "zipcode": "201010",
                "inventory": -1000
            ,
            
                "code": "AND3",
                "zipcode": "411001",
                "inventory": -1000
            ,
            
                "code": "AND4",
                "zipcode": " 700020",
                "inventory": -1000
            ,
            
                "code": "AND5",
                "zipcode": "110015",
                "inventory": -1000
            
        ],
        "price": 2199,
        "_id": ObjectId(),
        "size": "14"
    ,

]

我想更新代码值为 "AND1" 的每个库存值。 我想在 mongo 查询或任何 python 脚本中查询以使用嵌套值更新整个文档。 我很纠结这个问题。

【问题讨论】:

How to change all the array elements in a mongodb document to a certain value?的可能重复 我不想 mongo 查询直接更新到我的 All Inventory 值。你有什么想法吗??? 副本显示了如何做到这一点。就是这样。。 在“option.store.code”级别的情况下,我应该怎么做?? @AsheshKhatri 你试过用find and modify吗? 【参考方案1】:

尝试以下查询进行更新

db.stack.update("options.0.stores":$elemMatch:code:"AND1",$set:"options.0.stores.$.inventory":200)

为了检查,我会用图像更新....

我以你的数据为例

现在我已经使用了上面的查询 db.stack.update("options.0.stores":$elemMatch:code:"AND1",$set:"options.0.stores.$.inventory":200)

那么结果如下图所示

我已将库存更新为 200,其中代码:“AND1”

查看更改。

【讨论】:

这里我在选项中有多个数组,其中我有类似的“store.code”在这种情况下它将如何工作“options”:[“sku”:“8903689984338”,“stores” : [ "code": "AND1", "inventory": -1000 ], , "sku": "1742564789", "stores": [ "code": "AND1", "inventory": - 1000 ], , ] @AsheshKhatri 根据上述查询,所有符合条件的文档都将被更新。 正如您在问题“我想更新代码值为“AND1”的每个库存值。因此上述查询将满足语句 但是我在“options”中有多个 json 对象,那么在这种情况下我不能使用“options.0.stores”,我很挣扎!!你还有其他方法可以解决这个问题吗?? 你能给出你收藏的整个结构吗?如果我知道集合结构,我可以提供帮助

以上是关于想要在 Mongo 中更新数组对象值的数组的主要内容,如果未能解决你的问题,请参考以下文章

Mongo - 通过_id更新嵌套的对象数组

Mongo 文档中的更新数组不起作用

在 Mongo 集合中更新数组中的一条记录

在 mongo 和 upsert 中更新数组

Mongoose:通过 findOneAndUpdate 查询使用对象数组的总和更新根数据属性不起作用

如何将一个对象插入到mongo数组中的另一个对象中