MongoDB 包含聚合管道的 C# 驱动程序更新文档
MongoDB C# Driver Update Document with Aggregation Pipeline
如 MongoDB 4.2 中所述here,可以使用聚合管道更新文档 .
表示现在可以表达"conditional updates based on current field values or updating one field using the value of another field(s)".
例如:
db.members.update(
{ },
[
{ $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } },
{ $unset: [ "misc1", "misc2" ] }
],
{ multi: true }
)
我的问题是:如何在 C# 上使用 MongoDB 来做到这一点?
IMongoCollection
的 UpdateMany 将 UpdateDefinition<T>
作为第二个参数,PipelineUpdateDefinition 是派生的 class 之一。目前还没有表达式树支持,但你可以使用 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 }
}
]
如 MongoDB 4.2 中所述here,可以使用聚合管道更新文档 .
表示现在可以表达"conditional updates based on current field values or updating one field using the value of another field(s)".
例如:
db.members.update(
{ },
[
{ $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } },
{ $unset: [ "misc1", "misc2" ] }
],
{ multi: true }
)
我的问题是:如何在 C# 上使用 MongoDB 来做到这一点?
IMongoCollection
的 UpdateMany 将 UpdateDefinition<T>
作为第二个参数,PipelineUpdateDefinition 是派生的 class 之一。目前还没有表达式树支持,但你可以使用 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 }
}
]