【问题标题】:Updating Nested Document In MongoDB using Pymongo使用 Pymongo 更新 MongoDB 中的嵌套文档
【发布时间】:2015-08-27 05:48:30
【问题描述】:

以下是我要更新的文档的架构:

{

 "field1" : "value1",
 "field2" : "value2",
 "field3" : {
    "list" : [
        {
            "content" : "valueA",
            "start" : "valueA",
            "group" : "valueA"
        },
        {
            "content" : "valueB",
            "start" : "Needs_Updation",
            "group" : "valueB"
        },
    ]

}

我想更新文档的“Needs_Updation”值。

我尝试了以下方法:

db.collection.update({
    "field1":"value1" , 
    "field3.list" :{"$elemMatch" : {"content" : "valueB","group": "valueB" }}},
    {"$set":{"field3.list.$.start" : "Updated_Value"}}
)

还有一个更简单的查询,例如:

db.collection.update({
    "field1":"value1" ,
    "field3.list.content":"valueB",
    {"$set":{"field3.list.$.start" : "Updated_Value"}}
)

我正在使用 PyMongo,有没有办法更新这种文档?

【问题讨论】:

  • 我刚刚在 shell 中尝试了你的代码,它运行良好。什么对你不起作用?
  • 在您的第二个查询中,您在匹配时错过了}。它应该像 - db.collection.update({ "field1":"value1" , "field3.list.content":"valueB"}, {"$set":{"field3.list.$.start" : "Updated_Value"}}) ) 否则你的查询是正确的。
  • 我也不明白为什么查询在我的 shell 上不起作用,找不到任何其他方式
  • @AsadBaqri 您使用的是什么版本的 MongoDB 服务器?

标签: mongodb pymongo


【解决方案1】:

您的查询在 shell 中运行正常。你可以试试这段代码:

import pymongo
#from pymongo import Connection
try:
    conn=pymongo.MongoClient()
    print "Connected successfully!!!"
    db = conn.test     #database name = test
    collection= db.StackOverflow   #collection name= StackOverflow

    record= {
    "field1" : "value1",
    "field2" : "value2",
    "field3" : {
    "list" : [
    {
       "content" : "valueA",
       "start" : "valueA",
       "group" : "valueA"
    },
    {
       "content" : "valueB",
       "start" : "Needs_Updation",
       "group" : "valueB"
    }]
    }
    }
    collection.insert(record)
    for data in collection.find():
        print "Inserted Data=", data

    collection.update({
    "field1":"value1" ,     
    "field3.list" :{"$elemMatch" : {"content" : "valueB","group": "valueB" }}},
     {"$set":{"field3.list.$.start" : "Updated_Value"}}
   )

    for data in collection.find():
        print "Updated Data=", data

except pymongo.errors.ConnectionFailure, e: 
    print "Could not connect to MongoDB: %s" % e 
conn

【讨论】:

    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2017-03-06
    • 2010-11-11
    • 2021-12-05
    • 2020-07-04
    • 2018-04-23
    相关资源
    最近更新 更多