qq_18807109 2015-11-05 10:59 采纳率: 0%
浏览 2979

关于MongoDB中两张表的查询

图片说明
我需要根据一级和二级类别的name查询应用程序表的数据。但每次查询的都有用两个while循环,
DBCursor cursor1=null;
DBCursor cursor=this.dao.getDBCursor(offset, pageSize, db, "thirdCategory", sort);
DBObject query1 = new BasicDBObject();
while (cursor.hasNext()) {
@SuppressWarnings("unchecked")
Map map1 = cursor.next().toMap();
System.out.println(map1);
if(map1!=null){
query1.put("categoryId",map1.get("categoryId"));
cursor1=this.dao.getDBCursor(offset, pageSize, query1, "ucApp", sort);
while (cursor1.hasNext()) {
@SuppressWarnings("unchecked")
Map map2 = cursor1.next().toMap();

if(map2!=null){
map2.putAll(map1);
list.add(map2);
}
}
}
}
Map map3 = new HashMap();
map3.put("total", cursor1 == null ? 0 : cursor1.count());
map3.put("data", list);
return map3;
导致我分页不行。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 16:56
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在MongoDB中,你可以使用$match$group操作符来组合你的查询条件。但是,你需要确保你的查询是正确的,因为你没有提供足够的信息来确定如何正确地使用这些操作符。

    首先,你需要了解你的数据库结构。例如,你可能有三个集合:categories, applicationsthirdCategories。你需要知道如何连接它们并获取数据。

    如果你已经有一个有效的查询,那么你应该能够直接在$match$group操作符中添加条件。以下是一个示例:

    String categoriesCollectionName = "categories";
    String applicationsCollectionName = "applications";
    String thirdCategoriesCollectionName = "thirdCategories";
    
    // 创建一个查询对象
    BasicDBObject query = new BasicDBObject();
    query.put("category.name", "your_category_name");
    
    // 使用$match方法匹配查询条件
    DBCursor cursor1 = this.dao.getDBCursor(query, categoriesCollectionName, sort);
    
    // 创建一个新的查询对象用于分组
    BasicDBObject groupQuery = new BasicDBObject();
    groupQuery.put("_id", "$applicationId");
    
    // 使用$group方法进行分组
    DBCursor cursor2 = this.dao.getDBCursor(groupQuery, applicationsCollectionName, sort);
    
    // 获取结果集
    List<Map<String, Object>> result = new ArrayList<>();
    while (cursor2.hasNext()) {
        Map<String, Object> applicationData = cursor2.next();
        // 将查询到的应用程序数据添加到结果集中
    }
    
    return result;
    

    在这个例子中,我们首先创建了一个查询对象query,然后使用$match方法将categoryId字段设置为要查找的值。接下来,我们创建了一个新的查询对象groupQuery,它将应用于应用程序表,并且只返回包含特定字段的文档(在这种情况下,这个字段是applicationId)。最后,我们遍历cursor2并将每个应用程序的数据添加到结果集中。

    请注意,这只是一个基本的例子,你可能需要根据你的具体需求进行调整。

    评论

报告相同问题?