【问题标题】:Retrieving values from basicdblist Mongo从 basicdblist Mongodb 中检索值
【发布时间】:2020-07-07 10:40:21
【问题描述】:
{
DB db = Helper.connectingMonggo();
BasicDBObject query = new BasicDBObject();
query.put("_id", "123");
DBCollection table = new db.getCollection("prodDetail");
DBCursor cursor = table.find(query); --// cursor has only one record (size =1)

while(cursor.hasNext()){
  DBObject obj = cursor.next();
  List<String> upcs = new ArrayList<>();
  BasicDBList list = (BasicDBList) obj.get("prodList"); --//here prodList size also 1 always
  DBObject obj1 = (DBObject) list.get(0);
  BasicDBList detailsList = (BasicDBList) obj1.get("pDetailsList");

 for(Object obj2 : detailsList){
   JSONObject obj3 = new JSONObject(JSON.serialize(obj2));
   ups.add(obj3.get("upcStatus").toString());
 } } }

我正在获取带有 upcStatus 的列表数组,但是,它是正确的书写方式吗?

【问题讨论】:

  • 拥有代码的方式就是获得结果的方式。您还可以使用聚合查询来获取没有游标和for循环逻辑的输出。您还可以使用 MongoDB Java Driver 的较新 API - 请参阅参考 ->教程/示例..

标签: java json mongodb mongodb-java


【解决方案1】:

这是一个使用 MongoDB Java 驱动程序 v3.12 和 MongoDB v4.2 的聚合查询。请注意,结果是使用单个查询返回的,没有其他代码。这很有用,因为查询完全在服务器上运行并将结果返回到您的 Java 应用程序。

try(MongoClient mongoClient = MongoClients.create()) {
    MongoDatabase database = mongoClient.getDatabase("test");
    MongoCollection<Document> coll = database.getCollection("testCollection");
    List<Bson> pipeline = Arrays.asList(
        Aggregates.match(Filters.eq("_id", 123)),
        Aggregates.project(Projections.fields(
            Projections.excludeId(), 
                Projections.computed("upcStatus", Filters.eq("$arrayElemAt", 
                    Arrays.asList("$prodList.pDetailsList.upcStatus", 0L))
                )
        ))
    );
    
    Document doc = coll.aggregate(pipeline).first();
    System.out.println(doc.toJson());    // prints the array of upcStatus field values
}

代码中使用的类定义为以下类或包中:org.bson.Documentorg.bson.conversions.Bsoncom.mongodb.client.model.*com.mongodb.client.*

另外,请注意try 语句块打开与服务器的连接,并在尝试块结束时自动关闭。

【讨论】:

  • 我用我使用的 dbconnection 方法更新了我的问题。我想我使用的是旧方法,我没有使用 MongoClients.create() 连接到 mongodb。你能告诉我如何使用 MongoClients.create() 在我的情况下连接到 mongo 谢谢。
  • 以下链接有 oldnew 两种连接方式:Connect to MongoDB using Java driver。
  • 非常感谢。它现在可以工作,但我只得到一种产品 upcStatus。我有不止一种产品(pID).. 现在更新了 JSON 响应(对不起我的错误.. 我之前没有正确给出)... 只获得 ["Available", "Not Availabe"] 但我想要所有4 个喜欢 ["Available", "Not Availabe", "Available", "Not Available"]
  • 可以在数组字段上使用$unwind聚合阶段,然后使用投影得到指定值。
  • 我试过但没有运气.. 可能是我没有正确使用 $unwind,我尝试将 $unwind 添加到 coll 中,例如 coll.aggreagate({$unwind : "$upcStatus"}) .. 可以请给我 $unwind 的代码...在此先感谢 :)
猜你喜欢
  • 1970-01-01
  • 2021-12-25
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多