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

时间:2016-03-31 13:36:49

标签: c# mongodb mongodb-.net-driver

我们说我有一个抽象类Animal,子类DogCat

我的MongoDB表存储所有动物,并在文档中使用_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.

1 个答案:

答案 0 :(得分:1)

我通过使用将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);