繁体   English   中英

MongoDb c#更新文档中的数组

[英]MongoDb c# update array in document

我有以下代码:

_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是一个列表

任何想法为什么这不是更新文档?

[UPDATE]

还试过这个!

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

使用强类型Push将字符串列表附加到现有字符串列表的工作示例代码:

class Event
{
    public ObjectId Id { get; set; }
    public string Name { get; set; }
    public List<string> Participants { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        MongoClient client = new MongoClient("mongodb://localhost/test");
        var db = client.GetServer().GetDatabase("test");
        var collection = db.GetCollection("events");
        var event0 = new Event { Name = "Birthday Party", 
            Participants = new List<string> { "Jane Fonda" } };
        collection.Insert(event0);
        collection.Update(Query.EQ("_id", event0.Id),
            Update<Event>.PushAll(p => p.Participants, 
                new List<string> { "John Doe", "Michael Rogers" }));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM