我的MongoDb数据库中有一个文档,我想编写一个查询来检索其数组大小大于0(要清除的数组不为null或为空)的文档。
以下是我的C#代码,Quotes
是我的子数组:
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;
}
不幸的是,该函数始终返回false
。它必须与SizeGt
部分有关,因为当我删除此行时,它工作正常。
我尝试了其他类似filter &= Builders<Entity.Project>.Filter.Where(x => x.Quotes.Count > 0);
或filter &= Builders<Entity.Project>.Filter.Exists(x => x.Quotes[0]);
答案 0 :(得分:1)
SizeGT接受什么作为参数?
SizeGt(FieldDefinition<TDocument> field, int size);
,这意味着您必须提供一个需要依靠的字段。
如何解决代码
更改行:
filter &= Builders<Entity.Project>.Filter.SizeGt(x => x.Quotes.Count, 0);
对此
filter &= Builders<Entity.Project>.Filter.SizeGt(x => x.Quotes, 0);
您未提供Count的原因是因为SizeGT知道如何转换x.Quotes并获取其计数。如果计算并发现错误,则会得到错误:
无法确定x的序列化信息=> Convert(x.Quotes.Count)。
我只是在列表上运行了上面的代码,然后返回了正确的数字。