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

问题描述 投票:1回答:1

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

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

这确实起作用并发出此消息:

enter image description here

所以一切都很好。

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

所以我尝试了:

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

哪个显示此错误:

运算符'Equal'的操作数与以下参数不匹配方法“ op_Equality”。

我也尝试过:

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

并收到此错误:

{{document} {lockPolicyId} .ToString()不支持。

现在,我确实知道为什么会发生这种情况(整数而不是字符串)。

但仍然

问题:

如何通过ToString值进行过滤?

换句话说,使此行有效:

Builders<BsonDocument>.Filter.Where(a=>a["lockPolicyId"].AsString=="1")
c# mongodb mongodb-.net-driver
1个回答
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"
    }}
])
© www.soinside.com 2019 - 2024. All rights reserved.