如果集合中的任何属性具有'x'单词,如何过滤集合中的文档?(MongoDB驱动程序,C#)



假设我在一个名为"警报";具有以下结构:

{
"_id": {
"$oid": "5f299ed8905bcf0001cd9a56"
},
"CreatedDate": {
"$date": "2020-08-04T17:46:00.862Z"
},
"Name": "Alert name",
"Description": "Alert description",
"AlertTypeId": {
"$oid": "5f299ea7905bcf0001cd9a54"
}
"AlertTrigger": {
"Variation": "moreThan",
"Amount": 5
},
"Emails": ["hello@hotmail.com", "test@gmail.com"]
}

在我的.Net应用程序中,我的类表示为:

[BsonCollection("alerts")]
public class Alert
{
public ObjectId Id { get; set; }
public DateTime CreatedDate { get; set; }
public string Name { get; set; }
public string Description { get; set; }
[BsonRepresentation(BsonType.ObjectId)]
public string AlertTypeId { get; set; }
public AlertTrigger AlertTrigger { get; set; }
public ICollection<string> Emails { get; set; }
}
public class AlertTrigger
{
public string Variation { get; set; }
public double Amount { get; set; }
}

我想做的是过滤包含某些";关键字";在它们的任何属性中。例如,如果我用单词";多于";或单词";你好";,上面的元素会被找到,因为它们包含在它的属性中。

如何使用MongoDB驱动程序、LinQ、C#来实现这一点?

C#Linq抽象不包含实现这一点的方法。然而,在MongoDB中,您将能够在集合中的所有字段上创建一个文本索引。

db.collection.createIndex( { "$**": "text" } )

然后,您可以通过编写以下内容,在C#中对您的收藏进行文本搜索。

var client = new MongoClient();
var db = client.GetDatabase("text");
var collection = db.GetCollection<Alert>("alerts");
var filter = Builders<Alert>.Filter.Text("moreThan");
var result = await collection.Find(filter).ToListAsync();

最新更新