Я хочу обновить встроенный документ и выбросить ошибку, если элемент с тем же параметром уже существует с как можно меньшим количеством запросов.Ошибка сбрасывания, если элемент существует во вставке встроенного документа
Я попробовал следующее. :
public void AddUrlToList(Url url, Guid playListId)
{
MongoCollection<PlayList> collection = GetPlayListForEdit();
try
{
//DO better solution here...
var query = Query.EQ("UrlList.Url", url.UrlPart);
var items = collection.Find(query).ToList();
if (items.Count > 0)
throw new Exception();
//collection.Update(Query.And(Query<PlayList>.EQ(e => e.Id, playListId), Query.NE("UrlList", url.UrlPart)), Update.AddToSetWrapped("UrlList", url), WriteConcern.Acknowledged);
collection.Update(Query<PlayList>.EQ(e => e.Id, playListId), Update.AddToSetWrapped("UrlList", url));
}
catch (MongoCommandException ex)
{
string msg = ex.Message;
}
}
Документ:
public class PlayList
{
[BsonId(IdGenerator = typeof(CombGuidGenerator))]
public Guid Id { get; set; }
[BsonElement("Name")]
public string Name { get; set; }
[BsonElement("Owner")]
public Guid Owner { get; set; }
[BsonElement("UrlList")]
public List<Url> UrlList { get; set; }
//Curret URL info.
[BsonElement("CurrentUrl")]
public string CurrentUrl { get; set; }
[BsonElement("version")]
public Guid version { get; set; }
[BsonElement("time")]
public string time { get; set; }
[BsonElement("isRepeat")]
public bool isRepeat { get; set; }
}
public class Url
{
[BsonElement("Url")]
public string UrlPart { get; set; }
[BsonElement("Title")]
public string Title { get; set; }
}
Однако я предпочел бы хотеть сделать что-то в стиле outcommented строки, где я утверждать с .Не или что-то, что не существует этот элемент и Сбрось некоторая ошибка/предупреждение. Не уверен, как это сделать, не в первую очередь, пытаясь найти этот элемент и выбросить ошибку, если она существует. Маби, это единственный способ пойти?
Предложения Anny приветствуются, они являются новыми для Mongo и MongoC# драйвера.