我看到这是如何从这里蒙戈外壳来完成更新字段:MongoDB: Updating documents using data from the same documentpymongo:使用另一场
不过,我不知道如何使用Python驱动程序来做到这一点。因而我的目标是(在MySQL当量):
UPDATE coll SET field1 = field1 + field2;
我看到这是如何从这里蒙戈外壳来完成更新字段:MongoDB: Updating documents using data from the same documentpymongo:使用另一场
不过,我不知道如何使用Python驱动程序来做到这一点。因而我的目标是(在MySQL当量):
UPDATE coll SET field1 = field1 + field2;
到目前为止,我发现,最简单的方法是相适应的联苏答案使用pymongo.code.Code类db.eval(),是这样的:
db.eval(Code("function() {"
"coll.find({}, {field1: 1, field2: 2})"
".forEach(function(doc) {"
" doc.field1 += doc.field2;"
" coll.save(doc);"
" });"
"}"))
您可以选择保存js脚本在服务器上从mongo外壳与db.system.js.save({_id:'myfunc', value: function(){...}});
并从python执行db.eval(Code('return myfunc()'))
Col.update({}, {'$set': {'field1': field1 + field2})
空{}是选择标准,或where子句。
我很困惑,为什么没有引号field1和field2周围。这些不会从先前的查询中定义。 – richard 2012-04-18 08:47:01
为此,您需要查询文档并在应用程序代码中执行字段连接。 MongoDB目前无法执行此服务器端(尽管请参阅https://jira.mongodb.org/browse/SERVER-4079以跟踪实现此功能请求的进度) – dcrosta 2012-04-18 14:48:08
要清楚,我的意思是sum而不是concatenation(即在MySQL中会是CONCAT(field1,field2)),但是相同的区别。 – richard 2012-04-18 19:22:46
请注意,在当前版本的MongoDB(所有版本2.0.x及更早版本)中,只有1个javascript进程可以在服务器上同时运行。这个特殊的功能可能相当快,但是如果Map-Reduce作业同时运行,它可能会阻止此功能(反之亦然)。由于这些原因,服务器端JavaScript通常要谨慎使用。 – dcrosta 2012-04-18 19:36:09
谢谢你的提醒。请牢记这一点。 – richard 2012-04-18 19:47:26