mongodb c#:固定大小的多文档更新
假设我们有一个名为“things”的集合,其中“things”是这样的文档: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); 问题是:有没有办法
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字段都会递增。但我们也可以删除一些。恐怕你的解决方案是最好的办法。我等一会儿再作答复。非常感谢。