ЧЕГО ХОЧУ ДОСТИГАТЬ
Допустим, у меня есть этот объект:
{
"_id" : ObjectId("5aec063380a7490014e88792"),
"personal_info" : {
"dialing_code": "+44",
"phone_number": "67467885664"
}
}
Мне нужно объединить два значения personal_info.dialing_code (+44) и phone_number (67467885664) в одно. +4467467885664 и сравните его со значением. Мне нужно извлечь конкретную запись из базы данных, которая будет соответствовать указанному значению.
ПРОБЛЕМА
У меня проблемы с объединением двух полей внутри вложенного документа, и я получаю эту ошибку:
{
"name": "MongoError",
"message": "$concat only supports strings, not object",
"ok": 0,
"errmsg": "$concat only supports strings, not object",
"code": 16702,
"codeName": "Location16702"
}
ПОПЫТКА # 1
Я пробовал это:
UserModel.aggregate([
{ $unwind: '$personal_info' },
{$project: {
concat_p: {$concat: [
'$personal_info.dialing_code',
'$personal_info.phone_number'
]}
}}
])
Это дает мне ошибку, как упомянуто выше, и в результате я не могу сделать $ match сразу после.
ПОПЫТКА № 2
Я тоже пробовал это:
UserModel.aggregate([
{ $unwind: '$personal_info' },
{$project: {
p_dialing_code: '$personal_info.dialing_code',
p_phone_number: '$personal_info.phone_number',
concat_p: {$concat: [
'$p_dialing_code',
'$p_phone_number'
]}
}}
])
Я успешно удалил значения вложенного документа на один уровень, однако, когда я попытался конкатенировать, он выдает мне нулевые значения. Вот результат, который я получаю:
{
"_id": "5af0998036daa90014129d6e",
"p_dialing_code": "+44",
"p_phone_number": "13231213213244",
"concat_p": null
}
Я знаю, как это сделать на конвейере $ match, но мне не повезло объединить значения в поддокументе. Очевидно, мне нужно сделать это, прежде чем я смогу сравнить. Спасибо