如何使用 C# 将字符附加到 MongoDB 文档中的字符串
How to append Character to a String in a MongoDB Document with C#
我想将日志保存在我的数据库中,但它们是逐字符输入的。
目前我的异步代码显然丢失了一些更新:
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": {}
有没有办法简单地将一个字符附加到日志中 属性。
或者我至少可以在 mongoDB 的同一操作中执行查找和更新。
我按照@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 + @"' ]
}
}
}"
)};
}
我想将日志保存在我的数据库中,但它们是逐字符输入的。
目前我的异步代码显然丢失了一些更新:
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": {}
有没有办法简单地将一个字符附加到日志中 属性。
或者我至少可以在 mongoDB 的同一操作中执行查找和更新。
我按照@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 + @"' ]
}
}
}"
)};
}