Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb c#:固定大小的多文档更新_C#_Mongodb - Fatal编程技术网

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

mongodb c#:固定大小的多文档更新,c#,mongodb,C#,Mongodb,假设我们有一个名为“things”的集合,其中“things”是这样的文档: thing : { field1 : value1, field2 : value2, ... fieldn : valuen, someDate : dateValue } 使用c#(官方驱动程序),我们可以通过以下操作更新集合“things”上的多个文档: things.Update(query, update, UpdateFlags.Multi); 问题是:有没有办法

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

thing : {
    field1 : value1,
    field2 : value2,
    ...
    fieldn : valuen,
    someDate : dateValue
}
使用c#(官方驱动程序),我们可以通过以下操作更新集合“things”上的多个文档:

things.Update(query, update, UpdateFlags.Multi);
问题是:有没有办法按“someDate”字段排序“things”,然后更新固定数量的文档

比如:

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

谢谢。

您必须找到一个与您想要更新的文档相匹配的标准。例如,如果您的文档有一个ObjectId as
\u 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)
things.Update(Query.And(Query..LTE(p=>p.Id,highId),otherCriteria),
更新,UpdateFlags.Multi)
但是,这也将更新最近插入的任何文档,即在查询和update语句之间插入的文档。您还可以查询第一个和最后一个
\u id
,并使用
GT/LTE

当然,这需要一些单调的键(比如ObjectId或时间戳)才能工作


还请记住,时间戳是由客户端生成的,因此可能会出现一些时钟偏移。

这是一个有趣的“黑客”,可能是解决我问题的方法。但是,它假定插入的每个文档的_id字段都会递增。但我们也可以删除一些。恐怕你的解决方案是最好的办法。我等一会儿再作答复。非常感谢。