MongoDB 如何使用子类的属性创建全文索引

How to create a full-text index using properties of subclasses in MongoDB

假设我有一个摘要 class Animal,以及子classes DogCat.

我的 MongoDB table 存储所有动物,并在文档中使用 _t 类型鉴别器字段。

我想做的是在 2 个属性上创建一个全文索引,一个只存在于 Dog 个文档中,一个只存在于 Cat 个文档中。 JSON 足够简单:

{ 
    "dog_only_field" : "text", 
    "cat_only_field" : "text"
}

但我想使用官方 C# 驱动程序来执行此操作。我试过这个:

var builder = Builders<Animal>.IndexKeys;
var keys = builder.Text(x => ((Dog)x).MyText).Text(x => ((Cat)x).MyText);
col.Indexes.CreateOne(keys);

但是得到了Unable to determine the serialization information for x => Convert(x).Message.

我通过使用将 JSON 属性 名称指定为字符串的字段定义来实现此目的:

var dogFieldDef = new StringFieldDefinition<Animal>("dog_only_field");
var catFieldDef = new StringFieldDefinition<Animal>("cat_only_field");

var builder = Builders<Animal>.IndexKeys;

var key = builder
    .Text(dogFieldDef)
    .Text(catFieldDef);

col.Indexes.CreateOne(key);