如何使用 C# 将字符附加到 MongoDB 文档中的字符串

Posted

技术标签:

【中文标题】如何使用 C# 将字符附加到 MongoDB 文档中的字符串【英文标题】:How to append Character to a String in a MongoDB Document with C# 【发布时间】:2021-12-20 17:07:33 【问题描述】:

我想将日志保存在我的数据库中,但它们是逐个字符出现的。

目前我的异步代码显然丢失了一些更新:

var collection = db.GetCollection<ServerEntity>(ServerCollectionName);
var filter = Builders<ServerEntity>.Filter.Eq(server => server.ID, id);
var server = (await collection.FindAsync(filter)).First();
var update = Builders<ServerEntity>.Update.Set(server => server.Log, server.Log + message);
await collection.UpdateOneAsync(filter, update);

我有一个如下所示的文档:

"_id": "8e93561bf28feeb5a01b6aa29a551822a8f2310ef46ddcfb837ae29bfaa9829d",
"Log": "Udat1\nUdt2\npae3\n",
"Config": 

但它应该是这样的:

"_id": "8e93561bf28feeb5a01b6aa29a551822a8f2310ef46ddcfb837ae29bfaa9829d",
"Log": "Update1\Update2\Update3\n",
"Config": 

有没有办法简单地将一个字符附加到 Log 属性。

或者我至少可以在与 mongoDB 相同的操作中执行查找和更新。

【问题讨论】:

所以你想把Udat1\nUdt2\npae3\n替换成Update1\Update2\Update3\n 不,我想在这个属性上附加一个字符 您可以尝试使用带有聚合管道的更新功能并使用$concat 字符串运算符将字符附加到现有字符串字段。 如果能提供原始文档、要追加的值和文档结果就更好了。 【参考方案1】:

我按照@prasad_ 建议的聚合管道进行操作

public async Task AppendLog(string id, string message)

    var filter = Builders<ServerEntity>.Filter.Eq(server => server.ID, id);
    var update = Builders<ServerEntity>.Update.Pipeline(UpdateQuery(message));

    await ServerCollection.UpdateOneAsync(filter, update);


private BsonDocument[] UpdateQuery(string message)

    return new BsonDocument[]
    
        BsonDocument.Parse(
            @"
             
                $set: 
                    Log:
                         
                        $concat:[ '$Log', '" + message + @"' ] 
                    
                
            "
    );

【讨论】:

以上是关于如何使用 C# 将字符附加到 MongoDB 文档中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

将项目附加到 PyMongo 中的 MongoDB 文档数组而不重新插入

如何将查询字符串附加到错误文档

Mongoose:如何将附加字段添加到子文档数组中

Mongoose:如何将附加字段添加到子文档数组中

如何使用 spark/scala 将 json 字符串格式化为 MongoDB 文档样式?

具有 3 个级别的 MongoDB 嵌套查找并将新值附加到结果文档