Nano Hash - криптовалюты, майнинг, программирование

Первый аргумент $arrayElemAt должен быть массивом.

Я извлекаю набор записей из коллекции и присоединяюсь к другой коллекции.

Я хотел бы добавить поле в проецируемое поле, но получаю сообщение об ошибке - код и ошибка ниже:

db.getCollection("ConnectionEntity").aggregate(

    // Pipeline
    [
        // Stage 1
        {
            $match: {
                "Id":"9c06cb0c-966a-4f6b-b087-816587629079"
            }
        },

        // Stage 2
        {
            $lookup: // Equality Match
            {
                from: "Enterprise",
                localField: "EnterpriseId",
                foreignField: "_id",
                as: "joined"
            }
        },

        // Stage 3
        {
            $project: {                 
                "Enterprise": {"$arrayElemAt": ["$joined.Profile", 0]}
            }
        },

        // Stage 4 - doesn't work
        {
            $addFields: {
                "Enterprise.Id": {"$arrayElemAt": ["$joined._id", 0]}
            }
        },
    ]
);

Ошибка:

The following error occurred while attempting to execute the aggregate query

Mongo Server error (MongoCommandException): Command failed with error 28689: '$arrayElemAt's first argument must be an array'.

The full response is:
{ 

    "_t" : "OKMongoResponse", 

    "ok" : NumberInt(0), 

    "code" : NumberInt(28689), 

    "errmsg" : "$arrayElemAt's first argument must be an array", 

    "$err" : "$arrayElemAt's first argument must be an array"

}

  • Какая схема стоит за ConnectionEntity? 01.06.2018
  • Вы должны опубликовать свою коллекцию 01.06.2018

Ответы:


1

В вашем коде Stage 4 пытается сослаться на массив joined, который отбрасывается в Stage 3 (вы проецируете только поле Enterprise и _id неявно). Есть много способов исправить это, например, вы можете использовать $addFields в Stage 4, чтобы сохранить массив joined и удалить его позже:

db.ConnectionEntity.aggregate(

    // Pipeline
    [
        // Stage 1
        {
            $match: {
                "Id":"9c06cb0c-966a-4f6b-b087-816587629079"
            }
        },

        // Stage 2
        {
            $lookup: // Equality Match
            {
                from: "Enterprise",
                localField: "EnterpriseId",
                foreignField: "_id",
                as: "joined"
            }
        },

        // Stage 3
        {
            $addFields: {                 
                "Enterprise": {"$arrayElemAt": ["$joined.Profile", 0]}
            }
        },

        // Stage 4
        {
            $addFields: {
                "Enterprise.Id": {"$arrayElemAt": ["$joined._id", 0]}
            }
        },

        //get rid of joined if it's no longer useful
        {
           $project: {
               joined: 0
           }
        }
    ]
);
01.06.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..