Как обрезать значение на определенную длину, а затем применить поиск в MongoDB

#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. Спасибо Мохаммеду Наими .. Это сработало для меня и передало данные также в диаграммы монго.