6

次のコードがあります。

_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; }        
}

ids はリストです

これがドキュメントを更新しない理由はありますか?

[アップデート]

これもやってみた!

foreach (var id in ids)
{
    _eventInstanceRepository.GetInnerCollection().Update(
                              Query.EQ("_id", listingEventModel.Id),
                              Update.Push("ArtistIds", id));
}

運が悪い...

[アップデート]

RavenDb に戻ります - 少なくとも今のところは。MongoDb がどのように実行可能なオプションであるかはわかりません。インターネット上で (フラットな構造よりも少し複雑な) ドキュメントの更新について議論している実際の情報源がなく、私が見つけた例は単に機能しません。

[アップデート]

リポジトリコードは次のとおりです。

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);
    }
}
4

1 に答える 1