#mongodb #nosql #lookup #aggregation #mongodb-charts
Вопрос:
Основная проблема, с которой я сталкиваюсь, — это объединение нескольких документов. Например, когда я пытаюсь выполнить запрос по заказам клиентов, я не могу найти простой способ объединения заказов клиентам по идентификатору клиента, потому что в объекте заказы идентификатор клиента имеет _user$, добавленный к началу идентификатора пользователя, и я не знаю, как обрезать его в конвейере агрегирования.
например, В объекте заказа клиент определен как _p_customer:»_User$8qXjk40eOd», но в таблице пользователей _id равен всего 8qXjk40eOd, и поэтому функция поиска по умолчанию в диаграммах не может совпадать с этими двумя.
Примечание: Я использую сервер синтаксического анализа, и он хранит указатели указанным выше способом.
Именно так данные хранятся в коллекции заказов MongoDB.
поле «Клиент» на приведенном выше изображении является указателем на коллекцию _User
Именно так данные хранятся в коллекции MongoDB _User.
Мое требование-написать запрос mongo, который найдет всех пользователей и количество связанных с ними заказов. Я не могу этого сделать, потому что я не знаю, как удалить _User$ из строки заказа и присоединиться к нему _User через _id.
Комментарии:
1. пожалуйста, предоставьте примерные данные и ваши ожидаемые выходные данные
2. Пожалуйста, ознакомьтесь с образцами данных. Спасибо @mohammadNaimi
Ответ №1:
перед поиском в агрегате substr
укажите поле, которое вы хотите использовать в $lookup
db.collection.aggregate([
{
$addFields :{
nUser : { $substr: [ "$_p_customer", 6, -1 ] } // _User$ has 6 characters
}
},
{
$lookup :{
from:"usersCollection",
localField:"nUser",
foreignField : "_id",
as : "UserObject"
}
}
])
Комментарии:
1. Спасибо Мохаммеду Наими .. Это сработало для меня и передало данные также в диаграммы монго.