Python 更新mongo中嵌套数组文档中的第n个文档

Python 更新mongo中嵌套数组文档中的第n个文档,python,mongodb,mongodb-query,pymongo,Python,Mongodb,Mongodb Query,Pymongo,我需要更新Mongo DB中另一个文档中数组中的一个文档 { "_id" : ObjectId("51cff693d342704b5047e6d8"), "author" : "test", "body" : "sdfkj dsfhk asdfjad ", "comments" : [ { "author" : "test",

我需要更新Mongo DB中另一个文档中数组中的一个文档

{
        "_id" : ObjectId("51cff693d342704b5047e6d8"),
        "author" : "test",
        "body" : "sdfkj dsfhk asdfjad ",
        "comments" : [
                {
                        "author" : "test",
                        "body" : "sdfkjdj\r\nasdjgkfdfj",
                        "email" : "test@tes.com"
                },
                {
                        "author" : "hola",
                        "body" : "sdfl\r\nhola \r\nwork here"
                }
        ],
        "date" : ISODate("2013-06-30T09:12:51.629Z"),
        "permalink" : "mxwnnnqafl",
        "tags" : [
                "ab"
        ],
        "title" : "cd"
}
若我试图通过下面的命令更新注释数组中的第一个文档,那个么它会工作

db.posts.update({'permalink':"cxzdzjkztkqraoqlgcru"},{'$inc': {"comments.0.num_likes": 1}})
但是如果我像下面这样在python代码中使用相同的代码,我会得到写入错误,即它无法遍历元素。我不明白缺少了什么!! 谁能帮帮我吗

    post = self.posts.find_one({'permalink': permalink})       
    response = self.posts.update({'permalink': permalink},
                                 {'$inc':"comments.comment_ordinal.num_likes": 1}})

WriteError: cannot use the part (comments of comments.comment_ordinal.num_likes) to traverse the element
注释_序数应该是替换,而不是索引本身。您将其视为可以映射到序号的整数。我的意思是你应该做一些像:

updated_field = "comments." + str(comment_ordinal) + ".num_likes"

response = self.posts.update({'permalink': permalink}, {'$inc': {updated_field: 1}})
希望这能有所帮助。

注释顺序应该是一种替代,而不是索引本身。您将其视为可以映射到序号的整数。我的意思是你应该做一些像:

updated_field = "comments." + str(comment_ordinal) + ".num_likes"

response = self.posts.update({'permalink': permalink}, {'$inc': {updated_field: 1}})

希望这能有所帮助。

如果您做得不对,您需要动态构建查询,最好的方法是使用该方法


您也应该考虑使用单一更新方法,如果您需要更新多个文档,因为已被弃用。p> 您做错了您需要动态构建查询,最好的方法是使用该方法


您也应该考虑使用单一更新方法,如果您需要更新多个文档,因为已被弃用。p> 非常感谢。我没有注意到它是整数,应该更改。不建议使用

+
进行字符串连接参见@user3100115请在提出建议时更具描述性,而不是共享整个pep8规则:)我同意大多数使用格式的情况是最安全的选择,但我认为使用“+”没有问题如果您知道自己在做什么,就可以进行字符串连接。特别是如果你正在写一个简短的脚本,我相信这就是一个例子。没有具体的链接。在该页面中搜索“字符串连接”。@user3100115我没有要求链接,我已经知道了建议。我建议你用你的想法和解释来支持你的主张谢谢。我没有注意到它是整数,应该更改。不建议使用
+
进行字符串连接参见@user3100115请在提出建议时更具描述性,而不是共享整个pep8规则:)我同意大多数使用格式的情况是最安全的选择,但我认为使用“+”没有问题如果您知道自己在做什么,就可以进行字符串连接。特别是如果你正在写一个简短的脚本,我相信这就是一个例子。没有具体的链接。在该页面中搜索“字符串连接”。@user3100115我没有要求链接,我已经知道了建议。我建议你用你的想法和解释来支持你的主张