我们通常使用像这样的构建器添加索引
var keys = Builders<DocumentFolder>.IndexKeys.Ascending("Property1").Descending("Property2");
var opts = new CreateIndexOptions();
opts.Unique = false;
Collection.Indexes.CreateOne(keys, opts);
我正在尝试为我们添加的动态集合使其更通用,所以我尝试了这个
var Indexes = new Dictionary<string, string> {
{"Property1", "A"},
{"Property2", "D"}
};
var keys = Indexes.Aggregate(Builders<BsonDocument>.IndexKeys,
(current, next) => next.Value == "A" ?
current.Ascending(next.Key) : current.Descending(next.Key));
Collection.Indexes.CreateOne(keys, new CreateIndexOptions {Unique = isUnique});
但我得到一个“无法将类型'MongoDB.Driver.IndexKeysDefinition'隐式转换为'MongoDB.Driver.IndexKeysDefinitionBuilder'”错误。根据我对Aggregate的理解,两个代码段都应该返回等效的对象。我错了或者我的代码中有什么问题吗?
答案 0 :(得分:0)
所以我试图让Aggregate工作,但却无法让它工作。我假设它与升序/降序有关,返回的索引类型不同于IndexKeys。这虽然有效。
IndexKeysDefinitionBuilder<BsonDocument> builder = Builders<BsonDocument>.IndexKeys;
List<IndexKeysDefinition<BsonDocument>> definitions =
Indexes.Select(index => index.Value == "A" ?
builder.Ascending(index.Key) :
builder.Descending(index.Key)).ToList();
IndexKeysDefinition<BsonDocument> keys =
Builders<BsonDocument>.IndexKeys.Combine(definitions);
Collection.Indexes.CreateOne(keys, new CreateIndexOptions {Unique = isUnique});
如果有人可以进行汇总工作,我会接受他们的答案,因为这是最初的问题。