收藏:
{
"shopping_list": [
{
"date": 22,
"drinks": [1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000],
"year": 2016,
"month": 11
},
{
"date": 23,
"drinks": [1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000],
"year": 2016,
"month": 11
}
],
"password": "user",
"date_signup": "10-11-2016",
"name": "User",
"email": "user@user.com"
}
我制作的代码:
data_1 = [1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000]
data_2 = [2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000]
con.update({"email": "user@user.com",
"shopping_list.date": 23,
"shopping_list.month": 11,
"shopping_list.year": 2016},
{"$set": {"shopping_list.$.drinks": data_2}})
也试过这个(没有用):
con.update({"email": "user@user.com",
"shopping_list.date": {"$eq": 23},
"shopping_list.month": {"$eq": 11},
"shopping_list.year": {"$eq": 2016}},
{"$set": {"shopping_list.$.drinks": data_2}})
使用我的代码,我使用shopping_list
定位数组第二个索引中的$set
。但是在我运行之后没有任何改变。我的代码出了什么问题?
答案 0 :(得分:1)
这是因为您得到的查询表达式错误。
使用查询表达式,标识要更新的文档的$
位置更新运算符不知道该怎么做。如果需要在嵌入文档中指定多个条件,则需要使用$elemMatch
运算符。
con.update_one({
"email": "user@user.com",
"shopping_list": { "$elemMatch": {
"date": 23,
"month": 11,
"year": 2016}
}},
{"$set": {"shopping_list.$.drinks": data_2}})
另请注意,update()
实际上已在MongoDB 3.2,3.0中弃用。您应该使用update_one()
方法