У меня есть следующий код:MongoDb массив C# обновление в документе
_eventInstanceRepository.GetInnerCollection().Update(
Query.EQ("_id", listingEventModel.Id),
Update.PushWrapped<string[]>("ArtistIds", ids.ToArray()));
который предназначен для обновления следующий документ:
public class ListingEvent
{
public ObjectId Id { get; set; }
public string[] ArtistIds { get; set; }
}
иды является списком
Любые идеи, почему это не обновляет документы?
[ДОПОЛНЕНО]
Также попробовал это!
foreach (var id in ids)
{
_eventInstanceRepository.GetInnerCollection().Update(
Query.EQ("_id", listingEventModel.Id),
Update.Push("ArtistIds", id));
}
Не повезло ...
[UPDATE]
Возвращаясь к RavenDb - по крайней мере сейчас. Я не вижу, как MongoDb является жизнеспособным вариантом, все время нет реальных источников, обсуждающих (немного более сложные, чем плоские) обновления документов в Интернете, и примеры, которые я могу найти, просто не работают.
[UPDATE]
Вот код хранилища:
public class Repository<T> : IRepository<T>
{
private readonly MongoCollection<T> _docs;
public Repository(MongoCollection<T> docs)
{
_docs = docs;
}
public IList<T> GetAll()
{
return _docs.FindAll().Select<T, T>(x => x.As<T>()).ToList();
}
//HACK!
public MongoCollection<T> GetInnerCollection(){
return _docs;
}
public void Save(T doc)
{
_docs.Save(doc);
}
public void Save(IEnumerable<T> docsToSave)
{
foreach (var doc in docsToSave) Save(doc);
}
public void Dispose()
{
throw new NotImplementedException();
}
public void Delete(string id)
{
var query = Query.EQ("_id", id);
_docs.Remove(query);
}
}
Что такое GetInnerCollection - вы не даете нам всего кода ... – Alex
Это буквально просто получает внутреннюю коллекцию - я обновил репозиторий. cs code - это был хак, чтобы я мог попытаться понять эту проблему. – iwayneo
Боковое примечание: метод GetAll будет читать всю коллекцию за один раз, и, возможно, придется использовать linq для объектов, чтобы ничего ... ничего. Сделайте 'MongoDatabase db; db.GetCollection (name) .FindAll() 'вместо этого. Это дает вам «MongoCursor », который реализует 'IEnumerable '. Преобразуйте это в 'ToList', если вам нужно, но всегда используйте' SetLimit' в курсоре. –
mnemosyn