MongoDB обновляет вложенный объект с условием для одного из свойств вложенного объекта

#c# #mongodb #mongodb-query #mongodb-.net-driver

Вопрос:

Я использую MongoDB в своем приложении для чата c# .Net с помощью драйвера c#. У меня есть данные, которые представляют сообщения в чате, упрощенная версия этого будет выглядеть примерно так:

 public class Message
{
    [BsonId]
    public int Id { get; set; }
    public string Text{ get; set; }
    public Dictionary<int, TransactionStatus> MessageStatusesByParticipantID { get; set; }
}

public class TransactionStatus
{
    public int StatusCode { get; set; }
    public string ErrorMessage { get; set; }
}
 

Я ищу способ просмотреть кучу сообщений и внутри них обновить код состояния (который находится внутри MessageStatusesByParticipantID) только участников с более низкими кодами состояния по сравнению с предыдущим значением.

пример ввода:

 {
message: {
  _id: 1042
  Text: "hi",
  MessageStatusesByParticipantID: {
    1: {
       StatusCode: 1,
       ErrorMessage: ""
    },
    2: {
       StatusCode: 5,
       ErrorMessage: ""
    },
    3: {
       StatusCode: 2,
       ErrorMessage: ""
    },
    4: {
       StatusCode: 1,
       ErrorMessage: ""
    }
    }
  }
},
{
message: {
  _id: 1043
  Text: "hi 2",
  MessageStatusesByParticipantID: {
    1: {
       StatusCode: 5,
       ErrorMessage: ""
    },
    2: {
       StatusCode: 5,
       ErrorMessage: ""
    },
    3: {
       StatusCode: 5,
       ErrorMessage: ""
    },
    4: {
       StatusCode: 1,
       ErrorMessage: ""
    }
    }
  }
}
 

Теперь, если передать следующий код статуса как 4, я хочу, чтобы обновление получали только участники с кодом статуса ниже 4 (в каждом сообщении это могут быть разные участники).

Ожидаемый результат для передачи следующего значения как 4:

 {
message: {
  _id: 1042
  Text: "hi",
  MessageStatusesByParticipantID: {
    1: {
       StatusCode: 4,
       ErrorMessage: ""
    },
    2: {
       StatusCode: 5,
       ErrorMessage: ""
    },
    3: {
       StatusCode: 4,
       ErrorMessage: ""
    },
    4: {
       StatusCode: 4,
       ErrorMessage: ""
    }
    }
  }
},
{
message: {
  _id: 1043
  Text: "hi 2",
  MessageStatusesByParticipantID: {
    1: {
       StatusCode: 5,
       ErrorMessage: ""
    },
    2: {
       StatusCode: 5,
       ErrorMessage: ""
    },
    3: {
       StatusCode: 5,
       ErrorMessage: ""
    },
    4: {
       StatusCode: 4,
       ErrorMessage: ""
    }
    }
  }
}
 

Any way I can do this for a bunch of documents at the same update?

I am using Mongo C# driver but if you have an idea using javascript it can also help me.