Ravendb select - 更新多行

Ravendb select - update multiple row

我正在尝试 select 并从 ravendb 更新多行,但它递归地更新相同的行。即前 100 行。没有变化。

这是我的代码。我如何 select 一些行,更新每行的一些字段并一次又一次地执行直到我的工作完成。

var currentEmailId = 100;
using (var session = store.OpenSession())
{
     var goon = true;
     while(goon){
          var contacts = session.Query<Contacts>().Where(f => f.LastEmailId < currentEmailId).Take(100);
          if(contacts.Any()){
                foreach(var contact in contacts){
                    EmailOperation.Send(contact, currentEmailId);
                    contact.LastEmailId = currentEmailId;
                 }
             session.SaveChanges();
           }
           else{
             goon = false
           }
     }
}

这可能是因为您在保存更改后立即进行查询,而没有让索引在保存更改后更新。因此,您将取回相同的物品。要解决此问题,您可以告诉 SaveChanges 等待索引更新。您的代码看起来像这样:

试试这个:

var goon = true;
var currentEmailId = 100;
while (goon)
{
    using (var session = store.OpenSession())
    {
        var contacts = session.Query<Contacts>()
            .Where(f => f.LastEmailId < currentEmailId)
            .Take(100);

        if(contacts.Any())
        {
            foreach(var contact in contacts)
            {
                EmailOperation.Send(contact, currentEmailId);
                contact.LastEmailId = currentEmailId;
            }

            // Wait for the indexes to update when calling SaveChanges.
            DbSession.Advanced.WaitForIndexesAfterSaveChanges(TimeSpan.FromSeconds(30), false);
            session.SaveChanges();
        }
        else
        {
            goon = false
        }
     }
}

如果您一次更新许多联系人,您可能希望考虑使用 Streaming query results combined with BulkInsert 来批量更新许多联系人。