我正在运行以下查询,但它不起作用。当我在mongo UI中运行查询部分时,它返回我预期的结果。我正在使用UMongo。但它没有按预期更新文档。
db.system.js.save ({
_id:"script_1",
value: function() {
print("in function>>");
db.data.find({"$and":
[{"title":{$regex : '.*Green Red.*', $options : 's'}},
{"editor.key": {"$in": ["74014","45339"]}}, {"types" : {"$in": ["Notes"]}}]}).forEach(
function(docMatch){
print("Matching document found");
db.data.update(docMatch,
{$set:{"editor.key": "05335","editor.value": "editor1",
"editor.email": "editor1@gmail.com"}
}, false, true);
}
);
db.data.reIndex();
}
});
db.eval("script_1()");
我确实在mongo日志中看到“找到匹配的文档”,但没有更新。在日志中也显示以下消息。
Thu Sep 19 11:03:43 [conn1279] warning: ClientCursor::yield can't unlock b/c of recursive lock ns
谢谢你的帮助!
答案 0 :(得分:2)
如果没有您的数据并且能够运行您的查询,我不确定问题究竟是什么。但是,此代码存在许多问题:
如果这是UMongo生成的代码,我建议远离UMongo并使用官方支持的mongo shell。
为了修复你的更新调用,请尝试在mongo shell中运行类似的东西:
db.data.update(
{
"title": {$regex : '.*Green Red.*', $options : 's'},
"editor.key": {"$in": ["74014","45339"]},
"types" : "Notes"
},
{
$set: {
"editor.key": "05335",
"editor.value": "editor1",
"editor.email": "editor1@gmail.com"
}
},
false,
true
);