使用 C# MongoDB 将 Int 转换为 String?

Using C# MongoDB to convert Int to String?

我正在使用 C# MongoDb.Driver(2.10) 从集合中获取文档:

MongoClient dbClient = new 
MongoClient("mongodb://***");
IMongoDatabase db = dbClient.GetDatabase("***");
var collection = db.GetCollection<BsonDocument>("***");
Console.WriteLine( collection.Find(Builders<BsonDocument>.Filter.Empty).First());

这确实有效并发出了这个:

所以一切正常。

但现在我想尝试过滤 lockPolicyId.ToString()=="1" 的位置。(作为字符串,而不是数字

所以我试过了:

var filter= Builders<BsonDocument>.Filter.Where(a=>a["lockPolicyId"].AsString=="1");
var t=collection.Find( filter ).First() ;
Console.Writeline(t);

显示此错误:

The operands for operator 'Equal' do not match the parameters of method 'op_Equality'.

我也试过:

 var filter= Builders<BsonDocument>.Filter.Where(a=>a["lockPolicyId"].ToString()=="1");

并得到这个错误:

{document}{lockPolicyId}.ToString() is not supported.

现在,我明白为什么会这样(Int 而不是 String)。

但还是

问题:

如何按 ToString 值进行过滤?

换句话说,要使这条线有效:

Builders<BsonDocument>.Filter.Where(a=>a["lockPolicyId"].AsString=="1")

不可能。

MongoDB C# 驱动程序将 a=>a["lockPolicyId"]==1 解释为 {lockPolicyId: {"$eq" : "1"}}

当你尝试 a=>a["lockPolicyId"].AsString=="1" 时,它无法解释为 MongoDB 语法...(这样的查询 {{$toString:"lockPolicyId"} : "1"} 无效)


MongoDB .find 方法与 $where 运算符有异常:

db.collection.find({"$where": "this.lockPolicyId.toString() == '1'"})

但是你需要手动编写这样的查询(不能通过Predicate接口编写)。 注意:速度很慢

MongoDB 提供 aggregate 命令来执行异常查询。您需要定义查询管道。如果您在第一阶段使用 $toString 运算符,然后在第二阶段应用匹配条件,它将起作用:

db.collection.aggregate([
    {$addFields:{
        lockPolicyId : {$toString:"$lockPolicyId"}
    }},
    {$match:{
        lockPolicyId : "1"
    }}
])