MongoDb计数C#中的子数组元素返回所有时间0
我的MongoDb数据库中有一个文档,我想编写一个查询来检索数组大小大于0的文档(数组不为null或空) 这是我的C代码,给出了MongoDb计数C#中的子数组元素返回所有时间0,c#,mongodb,C#,Mongodb,我的MongoDb数据库中有一个文档,我想编写一个查询来检索数组大小大于0的文档(数组不为null或空) 这是我的C代码,给出了引号是我的子数组的事实: internal bool HasQuote(string projectNumber) { var filter = Builders<Entity.Project>.Filter.Eq(x => x.ProjectNumber, projectNumber); filter &= Builders&
引号
是我的子数组的事实:
internal bool HasQuote(string projectNumber)
{
var filter = Builders<Entity.Project>.Filter.Eq(x => x.ProjectNumber, projectNumber);
filter &= Builders<Entity.Project>.Filter.Exists(x => x.Quotes);
filter &= Builders<Entity.Project>.Filter.SizeGt(x => x.Quotes.Count, 0);
var res = _mongoCollection.CountDocuments(filter);
return res > 0;
}
内部bool HasQuote(字符串项目编号)
{
var filter=Builders.filter.Eq(x=>x.ProjectNumber,ProjectNumber);
filter&=Builders.filter.Exists(x=>x.Quotes);
filter&=Builders.filter.SizeGt(x=>x.Quotes.Count,0);
var res=\u mongoCollection.CountDocuments(过滤器);
返回res>0;
}
不幸的是,该函数返回所有时间false
。它必须与SizeGt
部分相关,因为当我删除这一行时,它工作正常。
我尝试了其他东西,比如
filter&=Builders.filter.Where(x=>x.Quotes.Count>0)
或过滤器&=Builders.filter.Exists(x=>x.Quotes[0])代码>SizeGT接受哪些参数?
SizeGt(字段定义字段,int-size)代码>
这意味着您必须提供一个需要统计的字段
如何修复代码
更改行:
filter &= Builders<Entity.Project>.Filter.SizeGt(x => x.Quotes.Count, 0);
filter&=Builders.filter.SizeGt(x=>x.Quotes.Count,0);
对此
filter &= Builders<Entity.Project>.Filter.SizeGt(x => x.Quotes, 0);
filter&=Builders.filter.SizeGt(x=>x.Quotes,0);
您不提供计数的原因是SizeGT知道如何转换x.Quotes并获得计数。如果您进行计数并捕获错误,您将得到错误:
无法确定x=>Convert(x.Quotes.Count)的序列化信息
我刚刚在列表中运行了上面的代码,它返回了正确的数字。您是否尝试只使用第一个筛选器运行count documents,以查看您是否获得了超过0个文档…@Jawad它确实返回了超过0个文档