LiteDB中使用SELECT语句的两类问题:结果不全与语法报错
LiteDB在PowerShell中的查询问题解决
问题1:查询仅返回第一条匹配结果
你的查询只返回第一条结果,是因为$db.Execute方法执行查询时默认仅返回单个结果。要获取所有匹配文档,改用集合的Find方法,或者使用$db.Query方法(该方法返回所有结果的枚举)。同时,根级字段无需用$.前缀,直接写字段名即可:
修正后的代码(方式1:使用Find方法)
$Collection.Find("[Author] = 'Alan Perlis'") | foreach { [Console]::WriteLine($_["Quote"].RawValue) }
修正后的代码(方式2:使用Query方法)
$db.Query("SELECT * FROM Quotes WHERE Author = 'Alan Perlis'") | foreach { [Console]::WriteLine($_["Quote"].RawValue) }
问题2:GROUP BY语句报错
LiteDB的SQL语法要求,在使用GROUP BY时,SELECT列表中的字段要么包含在GROUP BY中,要么被聚合函数包裹。虽然你的语句看似符合要求,但实际需要搭配聚合函数才能正常执行(例如统计每个作者的语录数量),或者用更简洁的DISTINCT实现去重需求:
修正后的代码(带聚合函数)
$db.Query("SELECT Author, COUNT(*) AS QuoteCount FROM Quotes GROUP BY Author") | foreach { [Console]::WriteLine($_["Author"].RawValue) }
替代方案(仅获取去重作者列表)
$db.Query("SELECT DISTINCT Author FROM Quotes") | foreach { [Console]::WriteLine($_["Author"].RawValue) }
内容的提问来源于stack exchange,提问作者Rossati
相关产品推荐
相关产品推荐

