AddToSetEach 运算符不会 return 正确的查询(Builders v 2.4.4)
AddToSetEach operator won't return the correct query (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] } } }
但是在尝试使用新的构建器时 class,我无法使其正常工作。我正在使用 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" }
有什么想法吗?
谢谢!
我认为 .ToJson() 不会按照您希望的方式在 FilterDefinition 上呈现字符串。在旧的 driver.
中它曾经更容易一些
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");
我有一些代码可以更新数组(添加到集合)。该代码当前正在使用旧版构建器:
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] } } }
但是在尝试使用新的构建器时 class,我无法使其正常工作。我正在使用 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" }
有什么想法吗?
谢谢!
我认为 .ToJson() 不会按照您希望的方式在 FilterDefinition 上呈现字符串。在旧的 driver.
中它曾经更容易一些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");