MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Transaktion

Das geht nicht.
Die einzige Möglichkeit wäre, someotherRelationaldb.Save(object); zu umschließen in einem Versuch catch, und auf dem catch, führen Sie mongoCollection.Remove aus

Wahrscheinlich benötigen Sie eine bekannte Kennungseigenschaft für object und könnte dann so etwas tun:

mongoCollection.Remove(Query.EQ("_id", object.Id));

Ziemlich unordentlich würde Ihre Save-Methode also etwa so aussehen:

private void Save(object)
{
   mongoCollection.Save(object);

   try
   {
      someotherRelationaldb.Save(object);
   }
   catch
   {
      mongoCollection.Remove(Query.EQ("_id", object.Id));
   }
}

Eine andere Möglichkeit besteht darin, eine Flag-Eigenschaft im object zu speichern das wird nach aktualisiert das erfolgreiche Schreiben in someOtherRelationaldb

Dies ist auch nicht gerade ideal, aber Sie könnten Ihre Abfrage so ändern, dass nur Dokumente zurückgegeben werden, bei denen IsPersisted ist Flag ist wahr.

Keiner dieser Ansätze wird in einer stark fragmentierten Umgebung gut funktionieren, obwohl ich nicht glauben würde.