在从CSV进行mongoimport后,我最终将大量布尔字段存储为字符串。 字符串值全部为“TRUE”,“FALSE”或为空。
如何将这些字段转换为适合整个集合的布尔值?
答案 0 :(得分:0)
在mongodb shell中你可以使用以下语句
db.collection.find({"Fieldname":"TRUE"}).forEach(function(a){a.Fieldname=true; db.collection.save(a)})
db.collection.find({"Fieldname":"False"}).forEach(function(a){a.Fieldname=false; db.collection.save(a)})
这样你可以将它从字符串更改为布尔值。
答案 1 :(得分:0)
虽然您可以使用$set
做一些非常有效的事情(虽然您正在将string
的数据大小的性质改为boolean
s),但我会去在这种情况下很简单。
从MongoDB控制台,您可以使用以下代码:
db.myCollection.find().forEach(function(doc) {
var changed = false;
// loop through all fields, looking for "TRUE" or "FALSE"
for(var field in doc) {
var value = doc[field];
if (value === "TRUE") {
doc[field] = true;
changed = true;
} else if (value === "FALSE") {
doc[field] = false;
changed = true;
} else if (value === "" || value === null ) {
// remove empty
delete doc[field];
changed = true;
}
}
// continue pattern checking more fields if needed
if (changed) { // if something changed, update the entire document
db.myCollection.update({_id: doc._id}, doc);
}
});
答案 2 :(得分:-1)
遍历应转换的不同字段,并生成包含当前键和应转换的值的查询。对于与查询匹配的每个文档,将字符串值替换为布尔值。
var boolean_fields = ['Key_a1','Key_a2', ..,'Key_an'];
var queryFunction = function(key, value){
var expression = {};
expression[key] = value;
return expression;
}
boolean_fields.forEach(function(fieldname, index, array) {
db.products.find( queryFunction(fieldname, "TRUE") ).forEach( function (match) {
match[fieldname] = true; // convert field to boolean
db.products.save(match);
});
db.products.find( queryFunction(fieldname, "FALSE") ).forEach( function (match) {
match[fieldname] = false; // convert field to boolean
db.products.save(match);
});
db.products.find( queryFunction(fieldname, "") ).forEach( function (match) {
match[fieldname] = null; // remove string type
db.products.save(match);
});
});