【问题标题】:Push an array of documents embedded in a document推送嵌入在文档中的文档数组
【发布时间】:2016-10-12 01:07:00
【问题描述】:

我有一个以下格式的集合

{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)

收到以下错误:

“地址”字段必须是数组,但在文档中是对象类型

【问题讨论】:

    标签: mongodb mongodb-query pymongo


    【解决方案1】:

    您使用的是哪个版本的 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"
        }
      ]
    }
    

    请注意update()方法在最新版本的pymongo中是deprecated。以后会被update_one()update_many()取代。

    【讨论】:

      【解决方案2】:

      我发现您的查询中有错字:

      {"City:"Tokyo",国家:"日本"}

      以下更新适用于mongo shell:

      db.collection.update( {Name: "Asd", Age: 23}, {$push:{ "Address":{"City":"Tokyo",Country:"Japan"} }}, {upsert:true})
      

      【讨论】:

      • 错字已更正。错误仍然抛出。它是 pymongo 特有的吗
      猜你喜欢
      • 2020-11-29
      • 2016-06-05
      • 2020-03-27
      • 2018-07-24
      • 2016-04-17
      • 2021-05-07
      • 2018-06-11
      相关资源
      最近更新 更多