public static bool Exists(this BsonValue bsonValue, string name) { return(bsonValue.Find(name) != BsonNull.Value); }
public static BsonValue Update(this BsonValue bsonValue, string name, BsonValue value) { var fieldNames = name.Split('.'); // Value to set on next level BsonValue valueForNextLevel = value; for (int i = 0; i < fieldNames.Length; i++) { var fieldName = fieldNames[fieldNames.Length - 1 - i]; if (fieldName == "$") { fieldName = "0"; } var valueToTake = string.Join(".", fieldNames.Take(fieldNames.Length - 1 - i)); var valueOfHigherLevel = string.IsNullOrEmpty(valueToTake) ? bsonValue : bsonValue.Find(valueToTake); if (valueOfHigherLevel.IsBsonDocument) { valueForNextLevel = valueOfHigherLevel.AsBsonDocument.Set(fieldName, valueForNextLevel); } else if (valueOfHigherLevel.IsBsonArray) { int fieldIndex = int.Parse(fieldName); valueOfHigherLevel.AsBsonArray[fieldIndex] = valueForNextLevel; valueForNextLevel = valueOfHigherLevel; } } return(valueForNextLevel); }