C#中的MongoDb count子数组元素始终返回0

时间:2019-12-18 16:27:54

标签: c# mongodb

我的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]);

的东西

1 个答案:

答案 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)。

我只是在列表上运行了上面的代码,然后返回了正确的数字。