Я ищу способ условно комбинировать операции набора. На данный момент мне не удалось увеличиться на updateefinitions, не делая их последовательно пунктиром один за другим.mongodb C# комбинирование набор операций условно
например. вместо:
Builders<BsonDocument>.Update.Set("someElement.Length", b.Length)
.Set("someElement.Path", b.Path)
Я пытаюсь получить найти способ использовать что-то в напрасной из:
var update = Builders<BsonDocument>.Update;
bool hasChanged = false;
if (a.Length != b.Length)
{
hasChanged = true;
update.Set("someElement.Length", b.Length)
}
if (a.Path != b.Path)
{
hasChanged = true;
update.Set("someElement.Path", b.Path)
}
if (hasChanged)
await someCollection.UpdateOneAsync(Builders<someModel>.Filter.Eq("_id", a.Id), update);
Есть ли способ сделать это, или я чеканка пирог в небе? Я не хочу заменить весь документ, и я ищу только обновленные поля, которые изменились.
Почему бы просто не конкретизировать документ BSON для обновления напрямую, а не использовать помощники? В качестве документа BSON ключ верхнего уровня «$ set» ', и все поля для этой операции будут дочерними элементами этого ключа. Это в основном просто хэш/карта, поэтому применяются те же методы, что и для добавления/построения любого из них. На самом деле все «вспомогательные» функции, такие как 'Set()', действительно делают. –
Ok звучит интересно, поэтому вместо него будут {$ set: {someElement.length: B.length, someElement.path: b.path}} и т. Д. И т. Д. Если это так, то ваше право. Это намного проще, и я могу легко понять, насколько такая функциональность будет мощной. – xxdefaultxx
Я знаю, что документация соответствует соглашению «оболочка», поэтому примеры в JSON, но если вы в основном думаете, что возможный BSON выглядит примерно так же (в абстрактных терминах), то это просто вопрос построения. Вы бы намного лучше знакомы с базовой документацией, чем документация к драйверу. См. ['$ Set'] (https://docs.mongodb.org/manual/reference/operator/update/set/). Конечно, я прав. –