2017-10-12 10 views
0

配列を更新するコードをいくつか追加しました(セットに追加)。コードは現在、レガシービルダーを使用している:AddToSetEachオペレータが正しいクエリを返しません(Builders v 2.4.4)

var data = new[] { 10, 20, 30 }; 
var fieldName = "data"; 

var oldWay = Update.AddToSetEach(fieldName , new BsonArray(data)); 
Console.WriteLine($"Old way:\n {oldWay.ToJson()} \n\n"); 

これは完全に、版画作品:

Old way: 
{ "$addToSet" : { "users" : { "$each" : [10, 20, 30] } } } 

しかし、新しいビルダークラスを使用しようとしたとき、私はそれが正常に動作させることはできません。私はMongoDB.Driver 2.4.4を使用しています。私のコード:

var data = new[] { 10, 20, 30 }; 
var fieldName = "data"; 

var newWay = Builders<BsonDocument>.Update.AddToSetEach(fieldName, new BsonArray(data)).ToJson(); 
Console.WriteLine($"New way:\n {newWay} \n\n"); 

出力は次のようになります。

New way: 
{ "_t" : "AddToSetUpdateDefinition`2" } 

任意の考え?

ありがとうございました!

+0

可能な複製(HTTPS [私はモンゴシェルで実行することができ、正規のJSONのmongoクエリにFilterDefinition 翻訳] ://stackoverflow.com/questions/32047692/translate-filterdefinitiontdocument-to-regular-json-mongo-query-that-i-can-run) – Veeram

答えて

0

私は思いません.ToJson()は、FilterDefinitionにどのようにしたいか文字列を描画します。これまでは古いドライバーではやや簡単でした。

Someone

はかかわらず、拡張メソッドを書いた:その後

public static class MongoExtensions 
{ 
    public static BsonDocument RenderToBsonDocument<T>(this UpdateDefinition<T> filter) 
    { 
     var serializerRegistry = BsonSerializer.SerializerRegistry; 
     var documentSerializer = serializerRegistry.GetSerializer<T>(); 
     return filter.Render(documentSerializer, serializerRegistry); 
    } 
} 

をすることができます

var data = new[] { 10, 20, 30 }; 
var fieldName = "data"; 

var newWay = Builders<BsonDocument>.Update.AddToSetEach(fieldName, new BsonArray(data)); 

var newWayJson = newWay .RenderToBsonDocument().ToJson(); 

Console.WriteLine($"New way:\n {newWayJson } \n\n"); 
+0

ニース、ありがとう!ちょっとした修正です:この場合、拡張メソッドはUpdateDefinitionを取るべきです。 – amachado

+0

編集ありがとう! – bgraham

関連する問題