假设我们有一个名为“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)
谢谢。
答案 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或时间戳)才能工作。
另请注意,时间戳是由客户端生成的,因此需要一些时钟偏差。