我正在使用mongodb 3.4版。基于Documentation here和SO Post,我在这里尝试使用Convention Pack将每个属性名称设置为lowerCamelCase
。
输入是Json
字符串,其中包含序列化对象的集合。请注意,集合中的每个对象都可以不同,并且可以具有不同的属性集。
例如,下面是包含3个混合对象的字符串。
"[{\"ToyotaProperty1\":\"Some Value\",\"ToyotaProperty2\":\"Some Value\",\"Name\":\"Toyota\"},
{\"HondaProperty1\":\"Some Value\",\"HondaProperty2\":\"Some Value\",\"Name\":\"Honda\"},
{\"FordProperty1\":\"Some Value\",\"FordProperty2\":\"Some Value\",\"Name\":\"Ford\"}]"
我想为每个对象在mongo集合中创建单独的文档。插入集合后,文档的属性名称应为lowerCamelCase
。因此,ToyotaProperty1
应该变成toyotaProperty1
,ToyotaProperty2
应该变成toyotaProperty2
,依此类推。...
public class MyRepository
{
private readonly IMongoDatabase _mongoDatabase = null;
public MyRepository(IMongoDatabase mongoDatabase)
{
_mongoDatabase = mongoDatabase;
}
public async Task Save(string str)
{
// register convention
var pack = new ConventionPack();
pack.Add(new CamelCaseElementNameConvention());
ConventionRegistry.Register("camel case", pack, t => true);
// get mongo collection
var cars = _mongoDatabase.GetCollection<BsonDocument>("cars");
// deserialize input string into collection of bsondocument
var list = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<IEnumerable<BsonDocument>>(str);
await cars.InsertManyAsync(list).ConfigureAwait(false);
}
}
问题
1>上面的代码按预期为每个JSON字符串对象创建了文档,但是在mongo中,文档的属性名称未变为lowerCamleCase
。而不是像ToyotaProperty1
一样保留它。
2>如何仅为此lowerCamleCase
方法设置Save
约定?第三个参数t => true
使其成为全局参数。我知道我可以使用名称空间,但不确定哪个名称空间?
更新1
我发现的大多数示例都使用自定义C#类。请注意,我有BsonDocument
的集合。我真的想知道Convention Pack是否甚至可以与BsonDocument