首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将新值添加到数组中,同时保留现有值

将新值添加到数组中,同时保留现有值
EN

Stack Overflow用户
提问于 2013-05-15 00:09:24
回答 3查看 102关注 0票数 0

我有一个数据的例子:

代码语言:javascript
复制
{
        "id": "2",
        "items":
            {
              "3" : { "blocks" : { "3" : { "txt" : 'xx' } } },
              "4" : { "blocks" : { "1" : { "txt" : 'yy'}, "2" : { "txt" : 'zz'} } }
            }
         }

我想让它看起来像下面的示例数据。只需向items.3.block s.3.txt追加一个新值,同时保留其现有值:

代码语言:javascript
复制
 {
        "id": "2",
        "items":
            {
              "3" : { "blocks" : { "3" : { "txt" : 'xx, tt' } } },
              "4" : { "blocks" : { "1" : { "txt" : 'yy'}, "2" : { "txt" : 'zz'} } }
            }
         }

我在下面跑,但没有任何区别。

代码语言:javascript
复制
dbx.test.update({"_id": ObjectId("5192264c02a03e374e67d7be")}, {'$addToSet': {'items.3.blocks.0.txt': 'tt'}}, )

什么应该是正确的语法,任何帮助都是感谢的…问候

EN

回答 3

Stack Overflow用户

发布于 2013-05-15 00:13:16

我没有意识到这是一个mongodb|pymongo问题。

代码语言:javascript
复制
a = {
    "id": "2",
    "items": {
              "3" : { "blocks" : { "3" : { "txt" : 'xx' } } },
              "4" : { "blocks" : { "1" : { "txt" : 'yy'}, "2" : { "txt" : 'zz'} } }
            }
     }

a['items']['3']['blocks']['3']['txt'] += ', yy'

关于如何修改dicts的简短回答:

代码语言:javascript
复制
a = {'moo' : 'cow', 'quack' : 'duck'}
a['moo'] = 'bull'
a['quack'] = 'duckling'
print(str(a))
if a['moo'] == 'bull':
    print 'Yes the bull says moo'

如果您的数据是JSON字符串,您首先需要将其从JSON字符串转换为Python中的字典,方法是:

代码语言:javascript
复制
import json
a = json.loads(<your string goes here>)
票数 0
EN

Stack Overflow用户

发布于 2013-05-15 00:21:25

您需要使用'$push'而不是'$addToSet'

代码语言:javascript
复制
dbx.test.update({"_id": ObjectId("5192264c02a03e374e67d7be")}, {'$push': {'items.3.blocks.0.txt': 'tt'}}, )
票数 0
EN

Stack Overflow用户

发布于 2013-05-15 22:01:27

很简单,因为将与$addToSet一起工作需要数组中的数据,但数据在{"key":"value"}中,但您有{ "blocks" : { "1" : { "txt" : 'yy'}, "2" : { "txt" : 'zz'} } },建议在数组中工作,例如

代码语言:javascript
复制
"items":
           [
              { "algo" : { "blocks" : { "txt" : ['xx']} } } ,
              { "algoo" : { "blocks" : { "txt" : ['yy','zz']} } }
            ]
db.foo.update({"_id":1,"items.algo.blocks.txt":'xx'},{$addToSet:{"items.$.algo.blocks.txt":'tt'}});

并且在字段name中不使用数字。

代码语言:javascript
复制
{
        "_id" : 1,
        "items" : [
                {
                        "algo" : {
                                "blocks" : {
                                        "txt" : [
                                                "xx",
                                                "tt"
                                        ]
                                }
                        }
                },
                {
                        "algoo" : {
                                "blocks" : {
                                        "txt" : [
                                                "yy",
                                                "zz"
                                        ]
                                }
                        }
                }
        ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16547936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档