2011-10-11 22 views
13

Sto cercando di utilizzare $push in una query di aggiornamento in mongodb, con il driver C#.BsonValue e classi personalizzate in MongoDB C# Driver

Il metodo Update.Push(...) richiede un nome di stringa (che va bene) e un BsonValue da "spingere". Questo è dove mi imbatto in problemi. Sto provando a inserire un tipo non semplice nell'array del campo.

Ad esempio: { $push : { "arrayfield" : { "a" : 7, "b" : 12 } } }

Questo funziona bene nella console Mongo, ma non riesco a capire come fare il mio oggetto in un BsonValue. Ho provato BsonValue.Create(myObjectInstance) ma questo mi dà un errore dicendo che il tipo .NET non può essere mappato su un BsonValue.

Mi manca qualcosa di semplice?

risposta

14

Conosco due approcci:

  1. Update.PushWrapped<MyObject>("arrayfield", myObjectInstance); // C# driver> = 1,0

  2. o convertire la classe per BsonValue te stesso tramite ToBsonDocument() metodo di estensione.

    Update.Push("arrayfield", myObjectInstance.ToBsonDocument());

+0

ho finito per usare .ToBsonDocument(), ma il .PushWrapped è qualcosa che ero completamente all'oscuro di, grazie per questo! – Redth