gpt4 book ai didi

c# - 带有聚合管道的 MongoDB C# 驱动程序更新文档

转载 作者:行者123 更新时间:2023-12-03 23:47:19 25 4
gpt4 key购买 nike

如所述 here来自 MongoDB 4.2 可以到 使用聚合管道更新文档 .

这意味着现在可以表达“基于当前字段值的条件更新或 使用另一个字段的值更新一个字段 ”。

例如:

db.members.update(
{ },
[
{ $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } },
{ $unset: [ "misc1", "misc2" ] }
],
{ multi: true }
)

我的问题是:我如何使用 来做到这一点C# 上的 MongoDB ?

最佳答案

IMongoCollection的 UpdateMany 需要 UpdateDefinition<T>作为第二个参数和 PipelineUpdateDefinition是派生类之一。到目前为止还没有表达式树支持,但您可以使用 BsonDocument类(class):

IMongoCollection<BsonDocument> col = ...;
var pipeline = new EmptyPipelineDefinition<BsonDocument>()
.AppendStage("{ $addFields : { " +
"status : 'Modified'," +
"comments: [ '$misc1', '$misc2' ]," +
"lastUpdate: '$$NOW' " +
"} }",
BsonDocumentSerializer.Instance)
.AppendStage("{ $project : { 'misc1':0, 'misc2':0 } }",
BsonDocumentSerializer.Instance);

col.UpdateMany(new BsonDocument(), pipeline);

它执行以下命令(来自 MongoDB 驱动程序的跟踪):
"updates" : [
{
"q" : { },
"u" : [
{ "$addFields" : { "status" : "Modified", "comments" : ["$misc1", "$misc2"], "lastUpdate" : "$$NOW" } },
{ "$project" : { "misc1" : 0, "misc2" : 0 } }],
"multi" : true }
}
]

关于c# - 带有聚合管道的 MongoDB C# 驱动程序更新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61842579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com