使用 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"
}}
])
我正在使用 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"
}}
])