2011-10-11 3 views
13

J'essaie d'utiliser $push dans une requête de mise à jour dans mongodb, avec le pilote C#.BsonValue et classes personnalisées dans MongoDB C# Driver

La méthode Update.Push(...) nécessite un nom de chaîne (c'est très bien), et un BsonValue à 'pousser'. C'est là que je rencontre des problèmes. J'essaye de pousser un type non simple au tableau du champ.

Par exemple: { $push : { "arrayfield" : { "a" : 7, "b" : 12 } } }

Cela fonctionne très bien dans la console Mongo, mais je ne peux pas comprendre comment faire mon objet dans une BsonValue. J'ai essayé BsonValue.Create(myObjectInstance) mais cela me donne une erreur indiquant que le type .NET ne peut pas être mappé à un BsonValue.

Ai-je oublié quelque chose de simple?

Répondre

14

Je sais deux approches:

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

  2. Ou convertir votre classe BsonValue vous via ToBsonDocument() méthode d'extension.

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

+0

Je fini par utiliser .ToBsonDocument(), mais le .PushWrapped est quelque chose que j'étais complètement ignorant, merci pour ça! – Redth

Questions connexes