Python mongodb(pymongo)`update`没有';行不通

Python mongodb(pymongo)`update`没有';行不通,python,mongodb,pymongo,nosql,Python,Mongodb,Pymongo,Nosql,假设我想对文档e执行一些简单的update操作,如下所示: print 'Updating:',e['title'],e['_id'] jp.update(e,{'$set':{'sensesJa':sensesJa,'last':'#pushFormsAndSetNewAtt'}, '$push':{'forms':{'$each':forms_to_push}}}) 它确实打印了“更新:…”,但文档没有更新。有什么想法吗 更新:添加要点: 更新的查询部分与任何文档都

假设我想对文档
e
执行一些简单的
update
操作,如下所示:

print 'Updating:',e['title'],e['_id']
jp.update(e,{'$set':{'sensesJa':sensesJa,'last':'#pushFormsAndSetNewAtt'},
            '$push':{'forms':{'$each':forms_to_push}}})
它确实打印了“更新:…”,但文档没有更新。有什么想法吗

更新:添加要点:

更新的查询部分与任何文档都不匹配,因此没有匹配的内容要更新

正如您所知道的那样,
\u id
然后仅对
e[“\u id”]
进行查询将确保您的查询目标正确

jp.update(e['_id'], {'$set':{'sensesJa':sensesJa,'last':'#pushFormsAndSetNewAtt'},
                     '$push':{'forms':{'$each':forms_to_push}}})
更新 按整个文档进行查询是很好的只要有匹配项,它就会更新。以下是查询和查找文档的示例:

from pymongo import *
client = MongoClient()
coll = client.test.test

coll.save({'_id': 1, 'hello': 'world'})
e = coll.find_one()

print(e)
coll.find(e).count()

输出为1,因为它与一个文档匹配。唯一会失败的时间是,如果我在第一次和第二次之间更改了
e
或删除了某个(另一个进程)
e

AFAIK,在
update
函数中没有名为
safe
的参数,谢谢您。无论是否使用
safe
,它都不起作用。您能提供一个您正在尝试更新的示例文档吗?没有什么特别的。。{{u id:“XXX_1150620”,ps:{},senses:[],pt:0,title:“XXX”,forms:[]}到底什么是
jp
?由于您在呼叫前打印更新,因此您确定代码中没有出现错误吗?还有,
e
是什么样子的,它应该更新什么文档,您能从终端向我们展示一下吗?还有其他的VAR是什么?谢谢。但是我想找出为什么在
jp.update(e,{})
时没有匹配,因为e只是
jp.find()
的一个结果的浅拷贝,我根本没有碰它。那么
jp.find(e)
是否没有返回任何内容?如果没有,文档已更改(通过另一个流程?)或已被删除。否。。。我根本没有更改
e
,并且在更新操作之前仍然可以正确访问
e
。我想,如果我
更新
一个文档,pymongo会尝试找出该文档(或者通常是一个dict)是否包含
\u id
,并使用该id更新相应的文档。但是,它似乎是以不同的方式进行的,也许只是执行
find
find_one
所做的操作来定位文档并更新它。无论如何,我不知道为什么我找不到
e
…)“查找”部分与整个文档匹配-如果不匹配,则该文档不存在于该数据库/集合中。有一些逻辑错误发生在你的应用程序代码,但如果你能显示一些代码证明不是这样的话,请这样做!另外,您不需要执行单独的
find
查询,然后
update
,更新的
query
部分的工作原理与
find
中的工作原理完全相同。请检查:(在第15行中,我应该使用es中的
ie