От новичка до гуру: Курсы программирования на CyberDuff

Как выполнить поиск Mongodb $ для локальных и внешних полей массива

Попытка выполнить $lookup для полей локального массива, который находится внутри объекта.

Запрос коллекции дел:

  {
     "no" : "2020921008981",
     "sale" : {
      "soldItems" : [
        {
            "itemId" : "5b55ac7f0550de00210a3b24", 
        },

        {
            "itemId" : "5b55ac7f0550de00215584re", 
        }
      ], 
     "bills" : [
        {
            "billNo" : "2020921053467", 
            "insurancePlanId" : "160", 
        },

        {
            "billNo" : "2020921053467", 
            "insurancePlanId" : "170", 
        }
      ]
    }
  }

Коллекция предметов:

{ 
  "_id" : ObjectId("5b55ac7f0550de00210a3b24"), 
  "code" : "ABCDE"
},
{ 
  "_id" : ObjectId("5b55ac7f0550de00215584re"), 
  "code" : "PQRST" 
} 

Страховой сбор:

 { 
   "_id" : ObjectId("5b55aca20550de00210a6d25"), 
   "name" : "HIJKL" 
   "plans" : [
       {
        "_id" : "160", 
        "name" : "UVWZ", 
       }, 
       { 
        "_id" : "161", 
        "name" : "LMNO", 
       }
    ]
  },
 { 
   "_id" : ObjectId("5b55aca20550de00210a6d25"),  
   "name" : "WXYZ"
   "coveragePlans" : [
       {
        "_id" : "169", 
        "name" : "5ABC", 
       }, 
       { 
        "_id" : "170", 
        "name" : "4XYZ", 
       }
    ]
  }

Желаемый результат:

  {
     "no" : "2020921008981",
     "sale" : {}
     "insurances" : "HIJKL \n WXYZ",
     "items" : [
         { 
            "_id" : ObjectId("5b55ac7f0550de00210a3b24"), 
            "code" : "ABCDE"
       },
         { 
            "_id" : ObjectId("5b55ac7f0550de00215584re"), 
            "code" : "PQRST"
       } 
    ]
  }

Попытка поиска с использованием локального поля itemRefId из коллекции item. И для поиска с использованием локального insurancePlanId из коллекции insurance, а затем $reduce возвращаемого массива в желаемый формат для поля insurances:

     {
        $lookup:
            {
                from: "item",
                let:  { iid: "$sale.soldItems.itemId" },
                pipeline: [
                      {
                        $match: {
                            $expr: {
                                $in: ["$_id", {
                                    $map: {
                                        input: "$$iid",
                                        in: { $_id: "$$this" }
                                    }
                                }
                                ]
                            }
                        }
                    }
                ],
                as: "items"
            }
    }, 
  {
        $lookup:
            {
                from: "insurance",
                let:  { iid: "$sale.insurances.insurancePlanId" },
                pipeline: [
                      {
                        $match: {
                            $expr: {
                                $in: ["$insurance.plans._id", {
                                    $map: {
                                        input: "$$iid",
                                        in: { $toObjectId: "$$this" }
                                    }
                                }
                                ]
                            }
                        }
                    }
                ],
                as: "insurancesList"
            }
    }, 
   {
    $addFields: {
        insurances: {
            $reduce: {
                input: "$insurancesList.name",
                initialValue: "",
                in: {
                    $cond: [ { "$eq": [ "$$value", "" ] }, "$$this", { $concat: [ "$$value", "\n", "$$this" ] } ]
                }
            }
        }
    }
}

Эта попытка возвращает ошибку mongodb. Любая помощь для получения желаемого результата будет оценена по достоинству.


Ответы:


1
  • есть ли способ объединить значения в формате NumberInt таким образом? 12.04.2020
  • @dineshalwis не уверен, приятель, попробуй. если это не работает, сначала конвертируйте с помощью $toString 12.04.2020
  • как мы можем сделать нулевую проверку для этого запроса? Потому что я получаю $in requires an array as a second argument, found: null за некоторые записи 15.04.2020
  • Новые материалы

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

    Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
    Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

    Все о кейсах: Camel, Snake, Kebab & Pascal
    В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..

    Как работает дистанционное парное программирование и почему оно может изменить вашу жизнь
    Серебряная пуля от одиночества и отвлекающих факторов во время обучения программированию Независимо от того, работаете ли вы или учитесь удаленно, велика вероятность, что одиночество и..

    🔥🔥👉Питон 🆚Javascript👈🔥🔥
    Сегодня Python и Javascript потрясают мир в области ИТ. Все хотят выучить Python и Javascript, чтобы получить высокооплачиваемую работу. Различные фреймворки Python и Javascript расширяют..