mongodb c#:具有固定大小的多文档更新

时间:2015-03-30 15:03:02

标签: c# mongodb

假设我们有一个名为“things”的集合,其中“thing”就是这样的文档:

thing : {
    field1 : value1,
    field2 : value2,
    ...
    fieldn : valuen,
    someDate : dateValue
}

使用c#(官方驱动程序),我们可以通过以下方式更新集合“事物”上的多个文档:

things.Update(query, update, UpdateFlags.Multi);

问题:有没有办法通过'someDate'字段订购“东西”,然后拿一定数量的文件进行更新?

类似的东西:

things.Update(query, update, UpdateFlags.Multi).orderby('somedate').take(1000)

谢谢。

1 个答案:

答案 0 :(得分:1)

您必须找到与您要更新的文档相匹配的条件。例如,如果您的文档的ObjectId为_id字段,则可以执行以下操作:

var highId = things.Find(query).SetSkip(1000).First().Id;

然后执行如下更新:

things.Update(Query.And(Query.<Thing>.LTE(p => p.Id, highId), otherCriteria),
              update, UpdateFlags.Multi)
但是,这也将更新最近插入的任何文档,即查询和更新语句之间的文档。您还可以查询第一个和最后一个_id并使用GT / LTE对。

当然,需要一些单调密钥(如ObjectId或时间戳)才能工作。

另请注意,时间戳是由客户端生成的,因此需要一些时钟偏差。