我在项目中使用JavaSpring和mongodb存储库。
定义如下:
@Document(collection = "Info")
public class Info {
String id,
Integer count,
String type
…
}
我需要从查询中返回一个id列表,其中count字段不是零,type字段有“binary”文本。
下面是我如何实现它:
@Query(value="{ 'count' : 0, 'type' : 'binary' }", fields="{ 'id' : 1 }")
List<String> getInfo();
我从上面的查询中得到这个结果:
0={"_id": {"$oid": "5eb97a8139d4c62be4d90e4c"}}
1={"_id": {"$oid": "3ec97a8127d4c60cb4d90e9e"}}
我期待这个结果:
{"5eb97a8139d4c62be4d90e4c", "3ec97a8127d4c60cb4d90e9e"}
如您所见,我希望从上面的查询中获得一个id字符串列表。
你知道我应该在上面的查询中修改什么才能得到预期的ids结果列表吗?
4条答案
按热度按时间tnkciper1#
不,你想的不可能。
原因:mongodb只能返回json文档。你可以包括你想要的字段。
您可以遵循以下建议:
dto定义:
示例存储库:
服务类别示例:
6pp0gazn2#
他回来了
{"$oid": "5eb97a8139d4c62be4d90e4c"}
是objectid的mongodb扩展json表示。它不返回字符串,因为数据库中存储的字段的类型为
ObjectID
,不是类型String
.如果您希望它返回一个字符串,您应该使用聚合和$tostring操作符来转换它。
kzipqqlq3#
您能得到的最好结果是一个带有数组字段的文档,其中包含找到的ID,如下所示:
这可以通过如下聚合查询实现:
polkgigr4#
我有两个建议。
1.您可以使用jpa查询而不是命名查询
2.在业务逻辑中使用javastreamapi从上述结果中收集所有id作为列表。