簡體   English   中英

我如何將項目添加到json對象內部的數組並將其保存到使用C#的mongodb中

[英]how can i add an item to an array inside json object and save it to mongodb using c#

我正在嘗試將json項目添加到json對象中存在的數組中以使用c#將其保存在mongodb上,我有此元素

    {
       "_id" : ObjectId("5cf67ad97739bfe8525e5353"),
       "Email" : "eyal@gmail.com",
       "Username" : "eyal",
       "Password" : "1234",
       "Tokens" : [ 
        {
            "Tokennumber" : "123",
            "Valid" : "true",
            "LoginDate" : ISODate("2019-06-04T00:00:00.000Z")
        }, 
        {
            "Tokennumber" : "124",
            "Valid" : "false",
            "LoginDate" : ISODate("2019-06-04T00:00:00.000Z")
        }
    ]
}

我想使用C#將令牌項目添加到令牌數組

我有此代碼查詢所請求的項目

var client = new MongoDB.Driver.MongoClient();
var db = client.GetDatabase("SupaFoo");
var _users = db.GetCollection<Users>("Users");
var user =
(from u in _users.AsQueryable<Users>()
where u.email == login.Email && u.password == login.Password
 select u).ToList();

新項目應該是這樣的

 {
    "_id" : ObjectId("5cf67ad97739bfe8525e5353"),
    "Email" : "eyal@gmail.com",
    "Username" : "eyal",
    "Password" : "1234",
    "Tokens" : [ 
    {
        "Tokennumber" : "123",
        "Valid" : "true",
        "LoginDate" : ISODate("2019-06-04T00:00:00.000Z")
    }, 
    {
        "Tokennumber" : "124",
        "Valid" : "false",
        "LoginDate" : ISODate("2019-06-04T00:00:00.000Z")
    },
    {/* newly added item */
        "Tokennumber" : "555",
        "Valid" : "true",
        "LoginDate" : ISODate("2019-06-05T00:00:00.000Z")
   }
]
}

您可以使用AddToSetdocs here )方法將項目原子添加到對象數組

        var updateDefinition = Builders<Users>.Update.AddToSet(x => x.Tokens, new Token());
        var filterDefinition = Builders<Users>.Filter.Eq(x => x.Id, userId);

        _users.UpdateOne(filterDefinition, updateDefinition);

除非您要執行一些復雜的字符串操作,否則恐怕您必須首先對其進行反序列化。 例如:

var user= JsonConvert.DeserializeObject<User>(yourJson);
user.Tokens.Add(new Token());
var _users = db.GetCollection<Users>("Users"); // if you have this initialized before re-use it
var filter = Builders<User>.Filter.Eq(s => s.Id, user.Id);
var result = await collection.ReplaceOneAsync(filter, user)

這種使用Json.net: https://www.newtonsoft.com/json

暫無
暫無

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

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