Pymongo如何更新数组中行的具体值

时间:2016-05-03 14:39:45

标签: python arrays mongodb pymongo

我在mongodb中有这个简单的JSON:

{
        "pwd_list": [
            {
                "pwd": "password1",
                "pwd_date": str(int(time.time()))
            },
            {
                "pwd": "password2",
                "pwd_date": str(int(time.time()))
            },
       ]
}

我只想尝试使用索引更新 pwd_list 数组中的一行......

我试图使用mongodb的$位置,但似乎只能用$ push ...但我不想推!

(我使用pymongo)

所以我尝试了不同的东西:

self.collection.update({"email": "email"},
            {
            "$set": {
                "pwd_list": {
                            "temp_passwd": "NEW VALUE",
                            "temp_date": "str(int(time.time()))"
                            }   
                   }
            })

但它没有按预期工作。 (上面的例子是在对象中转换数组...)

如果不可能,我至少可以更新第一行(总是这一行)吗?

先谢谢!

1 个答案:

答案 0 :(得分:1)

这样做有两种选择。 如果要搜索要更改的特定项目,则应执行以下操作:

self.collection.update({"email": "email", "pwd_list.pwd": "Password2"},
        {
        "$set": {
            "pwd_list.$": {
                        "pwd": "NEW VALUE",
                        "pwd_date": "str(int(time.time()))"
                        }   
               }
        })

如果您想要更改特定项目,并且您知道项目在数组中的位置,您应该执行以下操作(在我的示例中,我正在更改第一项):

self.collection.update({"email": "email"},
        {
        "$set": {
            "pwd_list.0": {
                        "pwd": "NEW VALUE",
                        "pwd_date": "str(int(time.time()))"
                        }   
               }
        })

您可以在this page上找到有关此内容的更多详情。