推送嵌入文档中的文档数组

时间:2016-06-11 00:31:20

标签: mongodb mongodb-query pymongo

我有以下格式的集合

{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

2 个答案:

答案 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()取代。