AddToSetEach运算符不会返回正确的查询(Builders v 2.4.4)

时间:2017-10-12 16:00:31

标签: mongodb mongodb-.net-driver

我有一些代码来更新数组(添加到设置)。该代码目前正在使用旧版构建器:

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] } } }

但是在尝试使用新的Builders类时,我无法正常使用它。我正在使用 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" }

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分: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");