Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDb计数C#中的子数组元素返回所有时间0_C#_Mongodb - Fatal编程技术网

MongoDb计数C#中的子数组元素返回所有时间0

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&

我的MongoDb数据库中有一个文档,我想编写一个查询来检索数组大小大于0的文档(数组不为null或空)

这是我的C代码,给出了
引号
是我的子数组的事实:

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个文档