【问题标题】:Using C# MongoDB to convert Int to String?使用 C# MongoDB 将 Int 转换为 String?
【发布时间】:2020-01-19 11:03:44
【问题描述】:

我正在使用 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);

显示此错误:

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

我也试过了:

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

得到了这个错误:

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

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

但还是

问题:

如何按 ToString 值过滤?

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

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

【问题讨论】:

  • 该列必须是另一个类。当您输入句号时,您给出了哪些选项?
  • 它是一个 MongoDB 对象。这些选择不是标准的网络库类型。

标签: c# mongodb mongodb-.net-driver


【解决方案1】:

不可能。

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

当你尝试a=&gt;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"
    }}
])

【讨论】:

  • 那么 AsString 有什么用?
猜你喜欢
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 2011-10-19
相关资源
最近更新 更多