2

MongoDB 2.4 添加了一个新的“更新后限制数组中元素的数量”功能。这是通过 shell 使用它的方式:

db.students.update(
    { _id: 1 },
    { $push: 
        { scores:
            { $each : 
            [
                { attempt: 3, score: 7 },
                { attempt: 4, score: 4 }
            ],
            $sort: { score: 1 },
            $slice: -3
            }
        }
    }
)

如何使用 MongoDB 的 C# 驱动程序来实现这一点?

4

1 回答 1

5

这是一个示例测试,展示了如何在不使用类型化类的情况下执行此操作:https ://github.com/mongodb/mongo-csharp-driver/blob/master/MongoDB.DriverUnitTests/Builders/UpdateBuilderTests.cs#L492

您正在寻找的相关代码是这样的:

var update = Update.PushEach(
    "name", 
     new PushEachOptions { Slice = -3, Sort = SortBy.Descending("a") }, 
    value1ToPush, 
    value2ToPush);

如果您使用类型化实体,我们也支持这一点: https ://github.com/mongodb/mongo-csharp-driver/blob/master/MongoDB.DriverUnitTests/Builders/UpdateBuilderTests.cs#L524

var update = Update<Test>.PushEach(
    x => x.B, 
    args => args.SortDescending(x => x.C).Slice(-3), 
    new[] { new B { C = 0 }, new B { C = 1 } });

最后,就像 .NET 驱动程序中的所有其他内容一样,您始终可以构建一个看起来与上面的结构完全相同的 BsonDocument 并简单地执行它。

于 2013-04-03T13:20:29.073 回答