假设我在一个名为"警报";具有以下结构:
{
"_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();