更新/插入子文档mongodb

更新/插入子文档mongodb,mongodb,pymongo,documents,findandmodify,Mongodb,Pymongo,Documents,Findandmodify,我显然不明白如何在现有文档中更新/插入子文档。 我尝试了以下方法: query = aCollection.find_one({stuffToFind}) aCollection.update(query, {"$set": {"subDoc" : {"1" : String, "2" : datetime.datetime.now(), "3" : otherString}}}) 这只工作一次,但如果执行此代码,我希

我显然不明白如何在现有文档中更新/插入子文档。 我尝试了以下方法:

        query = aCollection.find_one({stuffToFind})
        aCollection.update(query,
                      {"$set": {"subDoc" : {"1" : String, "2" : datetime.datetime.now(), "3" : otherString}}})
这只工作一次,但如果执行此代码,我希望不断更改子文档的数据1、2和3。查找和修改也会失败,因为它似乎会覆盖整个文档,删除除id和更新中指定的字段以外的所有其他字段。 因为我是MongoDB的新手,如果有人能给我一个代码示例来解决我的问题,那就太好了

Edit:如果不使用“$set”语句,则在第二次执行时也将保持不变

Edit2:尽管我无法在MonjaDB中直接编辑受影响的(JSON)文档,但这似乎是可行的:D

aCollection.update(query(but this time not as a variable),
                      {"$set" : {"subDoc.1" : Sting, "subDoc.2" : datetime.datetime.now(), "subDoc.3" : otherString}})
我不知道,为什么这是工作,所以也许有人可以解释我做错了

提前感谢,


Codehai

您在第一个示例中提供的要更新的查询不正确,而不是:

query = aCollection.find_one({stuffToFind})
你应该:

query = {stuffToFind}
更新没有抛出错误的原因是
find\u one
的结果是一个字典。还要注意的是,有时上述方法甚至会起作用,因为在更新过程中,您实际上要求MongoDB匹配与初始值对应的整个文档 查询当然,在这种情况下,后续使用query不会带来预期的结果,因为文档将从更新中更改

$set只更新我们指定的键,其他所有的都保持不变。这意味着,如果我们更新一个嵌入对象,那么整个嵌入对象将被替换为我们在$set中指定的对象。如果我们想精确定位嵌入对象中的关键点
我们必须像您在第二个示例中那样使用点表示法。

您在第一个示例中提供的要更新的查询不正确,而不是:

query = aCollection.find_one({stuffToFind})
你应该:

query = {stuffToFind}
更新没有抛出错误的原因是
find\u one
的结果是一个字典。还要注意的是,有时上述方法甚至会起作用,因为在更新过程中,您实际上要求MongoDB匹配与初始值对应的整个文档 查询当然,在这种情况下,后续使用query不会带来预期的结果,因为文档将从更新中更改

$set只更新我们指定的键,其他所有的都保持不变。这意味着,如果我们更新一个嵌入对象,那么整个嵌入对象将被替换为我们在$set中指定的对象。如果我们想精确定位嵌入对象中的关键点 我们必须像你在第二个例子中那样使用点符号