MongoDB 如何使用子类的属性创建全文索引
How to create a full-text index using properties of subclasses in MongoDB
假设我有一个摘要 class Animal
,以及子classes Dog
和 Cat
.
我的 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);
假设我有一个摘要 class Animal
,以及子classes Dog
和 Cat
.
我的 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);