簡體   English   中英

使用嵌套數組將集合插入列表

[英]Insert collection into list with nested array

我有這個收藏

    db.UserWatchtbl.insert( { 
fbId: "", 
Name: "user1", 
pass: "pass1",
Watchtbl: 
    [ 
        { 
        wid: "1350",
        name: "bought stock1",
        Symboles: [ { Name: "AAA" }, { Name: "BSI" } ] 
        },
        { 
        wid: "1350",
        name: "bought stock2",
        Symboles: [ { Name: "AAA" }, { Name: "BSI" }, { Name: "EXXI" } ] 
        }
    ]
} )

我嘗試將它插入到 C# 中的列表中,但我有一個嵌套數組 watchtbl 和符號。 我不知道如何將該元素放入列表或顯示它我試試這個代碼

private async void Master_BindData()
    {
        // add user into datagridview from MongoDB Colelction Watchtbl
        var client = new MongoClient("mongodb://servername:27017");

        var database = client.GetDatabase("WatchTblDB");
        var collectionWatchtbl = database.GetCollection<BsonDocument>("UserWatchtbl");

        var filter = new BsonDocument();
        using (var cursor = await collectionWatchtbl.FindAsync(filter))
        {
            while (await cursor.MoveNextAsync())
            {
                var batch = cursor.Current;
                foreach (var document in batch)
                {

                    user.Add(new UserWatchTblCls()
                    {
                        Id = ObjectId.Parse(document["_id"].ToString()),
                        Name = document["Name"].ToString()
                        //WatchTbls = document["Watchtbl"].AsBsonArray;
                    });
                }
            }
        }
    }

和類 UserWatchTblCls()

public class UserWatchTblCls
    {
        [BsonId]
        public ObjectId Id { get; set; }
        public string fbId { get; set; }
        public string Name { get; set; }
        public string Pass { get; set; }
        public List<WatchTblCls> WatchTbls { get; set; }
    }

    public class WatchTblCls
    {
        public string WID { get; set; }
        public string Name { get; set; }
        public List<SymboleCls> Symbols { get; set; }
    }

    public class SymboleCls
    {
        public string Name { get; set; }
    }

您必須遍歷FindAsyncResult 這會將數據收集到用戶中( List<UserWatchTblCls>

var user = new List<UserWatchTblCls>();

var cursor = collectionWatchtbl.FindAsync(filter).Result;
cursor.ForEachAsync(batch =>
{
    user.Add(new UserWatchTblCls()
    {
        Id = ObjectId.Parse(batch["_id"].ToString()),
        Name = batch["Name"].ToString()
    });
});

編輯

哦。 所以你也在尋找深度反序列化。

public ReadFromDB()
{
    var client = new MongoClient("mongodb://localhost:27017");

    var database = client.GetDatabase("test");
    var collectionWatchtbl = database.GetCollection<BsonDocument>("UserWatchtbl");

    var filter = new BsonDocument();
    var user = new List<UserWatchTblCls>();
    var cursor = collectionWatchtbl.FindAsync(filter).Result;
    cursor.ForEachAsync(batch =>
    {
        user.Add(BsonSerializer.Deserialize<UserWatchTblCls>(batch));
    });
}

public class UserWatchTblCls
{
    [BsonId]
    [BsonElement("_id")]
    public ObjectId Id { get; set; }
    public string fbId { get; set; }
    public string Name { get; set; }
    [BsonElement("pass")]
    public string Pass { get; set; }
    [BsonElement("Watchtbl")]
    public List<WatchTblCls> WatchTbls { get; set; }
}

public class WatchTblCls
{
    [BsonElement("wid")]
    public string WID { get; set; }
    [BsonElement("name")]
    public string Name { get; set; }
    [BsonElement("Symboles")]
    public List<SymboleCls> Symbols { get; set; }
}

public class SymboleCls
{
    public string Name { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM