PyMongo 的奇技淫巧

1 如何更新单个子元素

假如我们想更新下面这条记录中的密码,由112233改为v2aicn,你该怎么办?

1
2
3
4
5
6
7
{
"id": "123456",
"user": {
"name": "xiaoming",
"password": "112233"
}
}

很简单是不是,上手就可以写:

1
db.testCol.update_one({"id": "123456"}, {"$set": {"user": {"password": "v2aicn"}}})

改完一查发现不对,记录被改成了下面这样。

1
2
3
4
5
6
{
"id": "123456",
"user": {
"password": "v2aicn"
}
}

咦~~~我的name呢?

如果只修改其中一个字段要下面这样写:

1
db.testCol.update_one({"id": "123456"}, {"$set": {"user.password": "v2aicn"}})

现在看看就正常了:

1
2
3
4
5
6
7
{
"id": "123456",
"user": {
"name": "xiaoming",
"password": "v2aicn"
}
}

2 如何更新数组中的元素

假如我们想更新下面这条记录中的 xiaoli 的密码,由112233改为v2aicn,你该怎么办?

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"id": "123456",
"user": [
{
"name": "xiaoming",
"password": "112233"
},
{
"name": "xiaoli",
"password": "112233"
}
]
}

这里需要一些技巧,代码如下:

1
db.testCol.update({"id": "123456", "user.name": "xiaoli"}, {"$set": {"user.$.password": "v2aicn"}})

评论