我正在尝试删除描述中包含数字大于10的MongoDB上的所有文件夹。你能告诉我怎么做吗? 几个小时以来我一直在拼命地尝试...... 非常感谢!
答案 0 :(得分:0)
您需要一种机制来首先获取集合中的键列表,过滤列表中包含数字大于10的键,然后生成一个将与 {{3}一起使用的查询更新中的运算符。您的更新文档应具有以下结构:
var update = {
"$unset": {
"p11": "",
"p12": "",
...
}
}
您将在更新中用作
db.collection.update({}, update, {multi: true});
您需要 $unset
命令来生成该更新文档。以下mapreduce操作将使用文档作为值填充单独的集合:
db.collection.mapReduce(
function() {
var map = this;
for (var key in map) {
if (map.hasOwnProperty(key)){
num = parseInt(key.replace(/[^\d.]/g, '' ));
if (num > 10) emit(null, key);
}
}
},
function(key, values) {
return values.reduce(function(o, v) {
o[v] = "";
return o;
}, {});
},
{ "out": "filtered_keys" }
);
然后,您可以对结果集合运行查询以获取更新文档并执行实际更新:
var update = {
"$unset": db.filtered_keys.findOne({"_id": null}).value
},
options = { "multi": true };
db.collection.update({}, update, options);