如果集合中的任何属性具有 'x' 字,如何过滤集合中的文档? (MongoDB 驱动程序,C#)
How to filter documents in a collection if any of their properties has 'x' word? (MongoDB driver, 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 应用程序中,我将 class 表示为:
[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; }
}
我想做的是过滤在任何属性中包含特定“关键字”的文档。
例如,如果我按“moreThan”或“hello”一词进行过滤,则会找到上面的元素,因为它们包含在其属性中。
如何使用 MongoDB 驱动程序、LinQ、C# 实现此目的?
C# Linq 抽象不包含执行此操作的方法。但是,在 MongoDB 中,您将能够在 collection.
中的所有字段上创建文本索引
db.collection.createIndex( { "$**": "text" } )
然后您就可以通过编写以下代码在 C# 中对 collection 进行文本搜索。
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();
假设我在名为“提醒”的集合中有文档,其结构如下:
{
"_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 应用程序中,我将 class 表示为:
[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; }
}
我想做的是过滤在任何属性中包含特定“关键字”的文档。 例如,如果我按“moreThan”或“hello”一词进行过滤,则会找到上面的元素,因为它们包含在其属性中。
如何使用 MongoDB 驱动程序、LinQ、C# 实现此目的?
C# Linq 抽象不包含执行此操作的方法。但是,在 MongoDB 中,您将能够在 collection.
中的所有字段上创建文本索引db.collection.createIndex( { "$**": "text" } )
然后您就可以通过编写以下代码在 C# 中对 collection 进行文本搜索。
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();