#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.