我有以下格式的集合
{Name: "Asd", Age: 23}
我想添加一个文档数组,使最终集合看起来像
{
Name: "Asd",
Age: 23,
Address: [
{City: "Tokyo", Country: "Japan"},
{City: "Beijing", Country: "China"}
]
}
在pymongo中尝试了以下代码
db.collection.update({Name:"Asd", Age:23},{"$push":{"address":{"City:"Tokyo",Country:"Japan"}}},upsert=True)
收到以下错误:
字段'address'必须是数组,但在文档
中的类型为Object
答案 0 :(得分:0)
我看到你的查询中有一个拼写错误:
{" City:"
东京",国家:"日本"}
以下更新适用于mongo
shell:
db.collection.update( {Name: "Asd", Age: 23}, {$push:{ "Address":{"City":"Tokyo",Country:"Japan"} }}, {upsert:true})
答案 1 :(得分:0)
您使用的是什么版本的MongoDB和pymongo?我使用MongoDB 3.2.8和pymongo 3.2.2测试了下面的代码,它似乎按预期工作:
import pymongo
db = pymongo.MongoClient('mongodb://localhost:27017').get_database('test')
db.test.update( {'Name':'Asd', 'Age':23}, {'$push':{'address':{'City':'Tokyo', 'Country':'Japan'}}}, upsert=True)
db.test.update( {'Name':'Asd', 'Age':23}, {'$push':{'address':{'City':'Beijing', 'Country':'China'}}}, upsert=True)
这导致:
> db.test.find()
{
"_id": ObjectId("..."),
"Name": "Asd",
"Age": 23,
"address": [
{
"City": "Tokyo",
"Country": "Japan"
},
{
"City": "Beijing",
"Country": "China"
}
]
}
请注意,最新版本的pymongo中update()
方法为deprecated。它将来会被update_one()
和update_many()
取代。