如何在MongoDB中将String转换为Array
How to convert String to Array in MongoDB?
当对象的类型发生变化时,我陷入了困境。
如何转换:
{
"_id" : NumberLong(257),
"address" : "street Street, house 50, appartment 508, floor 5"
}
到此:
{
"_id" : NumberLong(257),
"userAddressList" : [{
"street" : "Street",
"house" : "50",
"building" : "",
"appartment " : NumberLong(508),
"entrance" : NumberLong(0),
"floor" : NumberLong(5),
"intercom" : ""
}]
}
使用mongo shell?
我需要转换大约350个条目,希望可以通过脚本完成。
你可以试试这个:
db.collection.find().forEach( function (x) {
lines = x.address.split(",");
obj = {};
userAddressList = [];
lines.forEach( function (address){
addressArray = address.replace(/^'s's*/, '').replace(/'s's*$/, '').split(" ");
obj[addressArray[0]] = !isNaN(parseInt(addressArray[1])) ? parseInt(addressArray[1]) : addressArray[1];
});
obj.building = "";
obj.intercom = "";
userAddressList.push(obj);
x.userAddressList = userAddressList; // convert field to string
db.collection.save(x);
});
您还可以使用MongoDB聚合框架将给定的文档转换为所需的格式。您需要使用$addFields
、$regexFind
和$convert
运算符来提取、转换和加载新字段。
以下聚合管道应该为您提供所需的结果:
db.collection.aggregate([
{ $addFields: {
userAddressList: {
$let: {
vars: {
street: {
$regexFind: { input: "$address", regex: /('w+)'s+Street/ }
},
house: {
$regexFind: { input: "$address", regex: /house's+('d+)/ }
},
appartment: {
$regexFind: { input: "$address", regex: /appartment's+('d+)/ }
},
floor: {
$regexFind: { input: "$address", regex: /floor's+('d+)/ }
}
},
in: [
{
street: "$$street.match",
house: "$$house.match",
building: "",
appartment: {
$convert: {
input: "$$appartment.match",
to: "long",
onError: NumberLong(0),
}
},
entrance: NumberLong(0),
floor: {
$convert: {
input: "$$floor.match",
to: "long",
onError: NumberLong(0)
}
},
intercom: ""
}
]
}
}
} },
{ $project: { address: 0 } }
]);
您可以在更新中使用foreach,如以下
db.test.find( { } ).forEach( function (x) {
x.userAddressList = x.address.split(" ");
db.test.save(x);
});
相关文章:
- 如何在MongoDB中将String转换为Array
- 将Javascript响应转换为Array/Map
- E4X中是否有一种方法可以将基元数据类型的XMLList转换为类似于Array.join()的Array
- 转换类似数组的对象Array.prototype.slice或Array.from
- 如何将Array转换为<ul><李>以字母为标题的字母列表
- 将 JavaScript Array.slice + 隐式扩展转换为 C++ vector
- 用Javascript将Array对象转换为Json
- Javascript 将带有子对象的 Object 转换为 Array
- 使用 Javascript 或 jQuery 将 Array-String 转换为对象
- 将本机数组/对象转换为 Ember.Array/Ember.Object 的最佳实践
- 为什么 Array(“1”,“2”,“3”).join() 在 JavaScript 中将字符串转换为数字
- 使用类似于 Array.prototype.map() 的方法将数组转换为键值对象
- Array.prototype.values()未定义-使用Babel在NodeJS环境中转换ES6
- 将以下代码从for循环转换为Array#映射
- 如何将json/array从中的ajax responseText转换为javascript数组
- 在Javascript中将String(从objc传递)转换为Array
- 在Javascript中使用Jade Array将其转换为字符串
- 将Array转换为Json
- 如何在Firefox和IE中将HTML Collection转换为Array
- 如何将字符串转换为TYPES.LPTSTR.targetType.array