首页 > 解决方案 > 使用 mongodb 的 java 驱动程序从集合中获取数组字段

问题描述

我在尝试将特定 MongoDB 字段提取为数组时遇到问题。所以我有一个名为“用户”的集合,并在一个名为“项目”的字段中的用户中嵌套数据,如下所示:

{ "_id" : "1", "username" : "apacheuser", "password" : "Summer95!", "firm" : "apache", "roles" : [ "client,admin" ], "items" : [ { "_id" : "12323", "item-id" : "12312", "item-name" : "İtemic", "price" : 123123, "quantity" : 1231231 }, { "_id" : "123123", "item-id" : "12313", "item-name" : "aftereror", "price" : 1232, "quantity" : 12313213 } ] }
{ "_id" : "2", "username" : "springuser", "password" : "Spring99!", "firm" : "SpringSource", "roles" : [ "client" ], "items" : [ { "_id" : "01231q", "item-id" : "1233", "item-name" : "Patates", "price" : 12321, "quantity" : 12 } ] }
{ "_id" : "3", "username" : "user3", "password" : "Autumn03!", "firm" : "RedHat", "roles" : [ "client" ] }

使用下面的查询,我可以获得我想要的字段,但是,对于 JSON 解析,我需要items从查询结果中删除标签。

Bson bsonFilter = Filters.eq("username", "apacheuser");
List<Document> results =db.getCollection("users").find(bsonFilter).projection(fields(include("items"),excludeId()))

预期的结果是这样的:

[ { "_id" : "12323", "item-id" : "12312", "item-name" : "İtemic", "price" : 123123, "quantity" : 1231231 }, { "_id" : "123123", "item-id" : "12313", "item-name" : "aftereror", "price" : 1232, "quantity" : 12313213 } ] }

相反,我得到了这个:

"items" : [{ "_id" : "12323", "item-id" : "12312", "item-name" : "İtemic", "price" : 123123.0, "quantity" : 1231231 }, { "_id" : "123123", "item-id" : "12313", "item-name" : "aftereror", "price" : 1232.0, "quantity" : 12313213 }] }

所以很明显,我只需要删除'items'标签即可正确解析。但我对如何做到这一点感到困惑。

标签: arraysjsonmongodbcollections

解决方案


推荐阅读