如果文档中的任何属性具有“ x”字样,该如何过滤它们? MongoDB驱动程序,C#

问题描述

假设我在一个名为“ alerts”的集合中具有以下结构的文档:

{
    "_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; }
}

我想做的是过滤在其任何属性中包含某些“关键字”的文档。 例如,如果我用单词“ moreThan”或单词“ hello”过滤,则会发现上面的元素,因为它们包含在其属性中。

如何使用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();

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...