2011-05-23 3 views
4

J'ai lu this article sur les opérations du jeu ravendb, mais il ne m'a pas montré exactement comment mettre à jour un ensemble de documents via C#. Je voudrais mettre à jour un champ sur tous les documents qui correspondent à certains critères. Ou pour le dire d'une autre manière, je voudrais profiter de cette C# et le rendre plus efficace:Définir les opérations dans RavenDB

var session = db.GetSession(); 
foreach(var data in session.Query<Data>().Where(d => d.Color == "Red")) 
{ 
    data.Color = "Green"; 
    session.Store(data); 
} 
session.SaveChanges(); 

Répondre

6

Voir http://ravendb.net/docs/2.5/faq/denormalized-updates

Le premier paramètre est le nom de l'index que vous souhaitez mettre à jour. Le deuxième paramètre est la requête d'index qui vous permet de spécifier votre clause where. La syntaxe de la requête est la syntaxe lucene (http://lucene.apache.org/java/2_4_0/queryparsersyntax.html). Le troisième paramètre est la clause de mise à jour. Quatrième paramètre est si vous voulez des résultats périmés.

documentStore.DatabaseCommands.UpdateByIndex("DataByColor", 
    new IndexQuery 
    { 
     Query = "Color:red" 
    }, new[] 
    { 
      new PatchRequest 
      { 
       Type = PatchCommandType.Set, 
       Name = "Color", 
       Value = "Green" 
      } 
    }, 
    allowStale: false); 
+0

Existe-t-il une documentation pour expliquer la syntaxe de la requête? Plus précisément, comment puis-je trouver tous les documents où un champ est égal à une valeur? –

+0

@ jake-pearson J'ai modifié ma réponse pour refléter votre question. J'espère que cela pourra aider. – nickvane

+0

Cela importe-t-il ce que j'utilise pour le nom de la requête? –