如何在MongoDB中操作(拆分和连接)String字段



我有一个MongoDB集合,其中包含一些文档,这些文档有一个名为user_profile_image的字段。此字段的值是一个URL。

我想写一个mongo更新语句,它将更改URL的基础,但保留名称。

例如:https://enggprodblob.blob.core.windows.net/engagement/MALE.jpg将更改为CCD_ 2。

我想找到包含该字段的所有文档,并应用上述突变。

样本文件:

[
{
"_id": 123,
"ticket_number": 143,
"ticket_string": "143",
"from_system": "VMS",
"ticket_name": "Visitor Management System - Vendor/ Visitor Request",
"category_id": 41,
"ticket_status": "Approved",
"status_id": 60,
"status_color": "#a84545",
"created_by_info": {
"user_emailId": "",
"user_id": "GUESTORVISITOR",
"user_name": "Prompt Personnel",
"user_profile_image": "https://enggprodblob.blob.core.windows.net/engagement/MALE.jpg"
},
"created_for": "GUESTORVISITOR",
"created_for_info": {
"user_emailId": "",
"user_id": "GUESTORVISITOR",
"user_name": "Prompt Personnel",
"user_profile_image": "https://enggprodblob.blob.core.windows.net/engagement/MALE.jpg"
},
"json_data": {
"data": [
{
"label_name": "Meeting From",
"field_value": "8th Jan 2019 15:42 "
},
{
"label_name": "Meeting To",
"field_value": "8th Jan 2019 18:30"
},
{
"label_name": "Participants",
"field_value": "Prompt  Personnel ( Tata Team) "
}
]
},
"current_approver_level": 10,
"created_date": "8th Jan 2019 15:42",
"original_created_date": "2019-01-08 15:42:00",
"priority": 5,
"assigned_to": "",
"assigned_info": {
"user_emailId": "",
"user_id": "",
"user_name": "",
"user_profile_image": ""
},
"assigned_on": "",
"pending_approval_with": "",
"pending_with_info": {
"user_emailId": "",
"user_id": "",
"user_name": "",
"user_profile_image": ""
},
"project_id": "null",
"project_name": "null",
"org_id": "",
"location_id": 0,
"upload_allowed": false,
"updated_on": "2020-03-05 17:35:00",
"is_internal": true,
"process_id": 473,
"admin": ", KESHAVP",
"roaadmin": "",
"delegated_to": "",
"external_url": "#",
"admin_email": "KESHAV.PATNE@KPIT.COM"
},
{
"_id": 456,
"ticket_number": 144,
"ticket_string": "144",
"from_system": "VMS",
"ticket_name": "Visitor Management System - Vendor/ Visitor Request",
"category_id": 41,
"ticket_status": "Approved",
"status_id": 60,
"status_color": "#a84545",
"created_by_info": {
"user_emailId": "",
"user_id": "GUESTORVISITOR",
"user_name": "Chaitanya Bhavthankar",
"user_profile_image": "https://enggprodblob.blob.core.windows.net/engagement/MALE.jpg"
},
"created_for": "GUESTORVISITOR",
"created_for_info": {
"user_emailId": "",
"user_id": "GUESTORVISITOR",
"user_name": "Chaitanya Bhavthankar",
"user_profile_image": "https://enggprodblob.blob.core.windows.net/engagement/MALE.jpg"
},
"json_data": {
"data": [
{
"label_name": "Meeting From",
"field_value": "8th Jan 2019 15:53 "
},
{
"label_name": "Meeting To",
"field_value": "8th Jan 2019 18:30"
},
{
"label_name": "Participants",
"field_value": "Chaitanya  Bhavthankar (Self) "
}
]
},
"current_approver_level": 10,
"created_date": "8th Jan 2019 15:53",
"original_created_date": "2019-01-08 15:53:00",
"priority": 5,
"assigned_to": "",
"assigned_info": {
"user_emailId": "",
"user_id": "",
"user_name": "",
"user_profile_image": ""
},
"assigned_on": "",
"pending_approval_with": "",
"pending_with_info": {
"user_emailId": "",
"user_id": "",
"user_name": "",
"user_profile_image": ""
},
"project_id": "null",
"project_name": "null",
"org_id": "",
"location_id": 0,
"upload_allowed": false,
"updated_on": "2020-03-05 17:35:00",
"is_internal": true,
"process_id": 473,
"admin": "",
"roaadmin": "",
"delegated_to": "",
"external_url": "#"
}
]

如果以上链接对所有链接都相同,那么您可以尝试以下聚合。了解有关子字符串和串联的更多信息。

db.<your_collection>.aggregate(
[
{
$project: { new_url: { $concat: [ "https://kpitblob.kpit.com", {$substr: ["user_profile_image",43]}]}}
}
]);

或者,如果链接是动态的,那么您可以尝试以下链接。像这个例子

let newBase = 'https://kpitblob.kpit.com';
db.<your_collection>.find({user_profile_image:url}).forEach(data => {
let urlObj = new URL(URL);
let newUrl = newbase + urlObj.pathname;
// Then you can save the new url in the DB.
});

您可以了解有关MDN上URL对象的更多信息。

最新更新