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

Драйвер MongoDb С# 2.0 добавляет элемент во вложенный массив

У меня есть коллекция документов Profiles с массивом следующих документов:

public class Profile2MailList
{


    [BsonElement(elementName: "listId")]
    [BsonRequired]
    public int MailListId;

    [BsonElement(elementName: "status")]
    [BsonRequired]
    public int Status;

    [BsonElement(elementName: "subscriptionDate")]
    [BsonRequired]
    public DateTime SubscriptionDate;
} 

в каждом Profile. Мне нужно добавить в массив Profile2MailList новый документ Profile2MailList в каждом Profile на основе Profile2MailList, который уже содержится в определенном Profile. Так что мне нужно

  • Возьмите нужные профили из коллекции Profiles
  • Обновить массив Profile2Maillist в каждом Profile
  • Запустите команду обновления Как я могу выполнить это действие через C# 2.0 MongoDb Driver. У меня MongoDb v 3.0.2. Я пытаюсь сделать это следующим образом:

       List<Profile> listProfiles = new List<Profile>();
                foreach (Profile item in profiles)
                {
                    item.MailLists.ToList().Add(new Profile2MailList(maillistId, item.MailLists.FirstOrDefault().Status));
                    var t = item;
                    listProfiles.Add(t);
                }
        dbCollection.UpdateManyAsync(listProfiles)
    

  • Я знаю, что изменения в новом драйвере C# плохо документированы, но вы, должно быть, хотя бы что-то пробовали. Пожалуйста, покажите свою попытку (даже если она не удалась), так как без нее это просто выглядит как вопрос о написании моего кода для меня. Попробуйте и потерпите неудачу, и это, по крайней мере, ясно показывает, что вы хотите сделать. 18.09.2015
  • @BlakesSeven я понятия не имею, как это сделать, я могу использовать InsertManyAsync в случае, когда мне нужно вставить новые документы - это работает нормально, но как обновить много документов со сложным сценарием обновления? Я могу выполнять UpdateOneAsync, но UpdateDefinition не соответствует моим потребностям 18.09.2015
  • Большая большая ссылка edit на ваш вопрос. Покажите свои неудачные попытки. Поверьте, никто не будет смеяться. Но никакое усилие не принесет мне никакой помощи. 18.09.2015
  • @BlakesSeven я добавил дополнительную информацию 18.09.2015

Ответы:


1

Метод «UpdateManyAsync» работает только в том случае, если вы хотите выполнить один тип обновления, что не похоже на ваш случай. Вместо этого вы хотите выполнить массовое обновление. Основываясь на вашем примере, вы хотели бы сделать что-то вроде:

        var bulk = new List<WriteModel<Profile>>();
        foreach (Profile item in profiles)
        {
            var newProfile = new Profile2MailList(maillistId, item.MailLists.FirstOrDefault().Status);
            var filter = Builders<Profile>.Filter.Eq(g => g.Id, item.Id);
            var update = Builders<Profile>.Update.AddToSet(item.MailLists, newProfile);
            var updatemodel = new UpdateOneModel<Profile>(filter, update);

            bulk.Add(updatemodel);  
        }
        await profileCollection.BulkWriteAsync(bulk);

Оператор AddToSet добавляет значение в массив, если это значение уже не присутствует.

19.09.2015
Новые материалы

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

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

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

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

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

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

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