Java 从2个集合中检索多个条目

Java 从2个集合中检索多个条目,java,json,mongodb,Java,Json,Mongodb,场景: System.out.println("Fast Food Restaurants"); BasicDBObject rest = new BasicDBObject(); rest.put("categories", "Indian"); DBCursor cursor2 = table.find(rest); while(cursor2.hasNext()){ //display all fast food restaurants System.out.println(cu

场景:

System.out.println("Fast Food Restaurants");

BasicDBObject rest = new BasicDBObject();
rest.put("categories", "Indian");
DBCursor cursor2 = table.find(rest);
while(cursor2.hasNext()){ //display all fast food restaurants
    System.out.println(cursor2.next());
}
我有两个JSON存储在mongodb中,格式如下:(它们来自Yelp教育)

JSON1:(Yelp业务)

   {
     "business_id":"tl9XIP5trlkcuSfTQqe5jg",
     "full_address":"632 N Estrella Pkwy\nGoodyear, AZ 85338",
     "hours":{
   },
   "open":true,
   "categories":[
   "Fast Food",
   "Restaurants"
   ],
   "city":"Goodyear",
   "review_count":6,
   "name":"McDonalds",
   "neighborhoods":[

   ],
   "longitude":-112.39319500000001,
   "state":"AZ",
   "stars":2.0,
   "latitude":33.453887000000002,
   "attributes":{
   "Take-out":true,
   "Wi-Fi":"free",
   "Drive-Thru":true,
   "Alcohol":"none",
   "Caters":false,
   "Noise Level":"average",
   "Takes Reservations":false,
   "Delivery":false,
   "Parking":{
     "garage":false,
     "street":false,
     "validated":false,
     "lot":false,
     "valet":false
  },
  "Has TV":true,
  "Outdoor Seating":false,
  "Attire":"casual",
  "Waiter Service":false,
  "Accepts Credit Cards":true,
  "Good for Kids":true,
  "Price Range":1
   },
   "type":"business"
}
JSON2:(评论)

他们都有相同的业务id

问题陈述:如何编写查询,以便获取“类别”:“快餐”,同时获取评论

我能够检索到一篇评论,但检索不到评论。请评论

代码:

System.out.println("Fast Food Restaurants");

BasicDBObject rest = new BasicDBObject();
rest.put("categories", "Indian");
DBCursor cursor2 = table.find(rest);
while(cursor2.hasNext()){ //display all fast food restaurants
    System.out.println(cursor2.next());
}
如何显示其他JSON的评级


谢谢你的时间

你必须分两步来做。在Mongo没有加入。因此,您无法编写单个查询来访问来自两个不同集合的数据

您在以下步骤中获取了业务-

BasicDBObject rest = new BasicDBObject();
rest.put("categories", "Indian");
下一步-

DBObject query = new BasicDBObject();
DBCursor cursor3 = null;
DBObject dbObject = null;
while(cursor2.hasNext()){ //display all fast food restaurants
    dbObject = cursor2.next();
    query.put("business_id",dbObject.get("business_id"))//get the business_id from dbObject returned from above
    cursor3 = table2.find(query); // here you have all the reviews for that business.
    //next loop through cursor3 for your reviews
}

在mongodb文档中,如果您将所有内容都存储为字符串,那么您可以执行dbObject.toString()并获取json,然后使用gson的jackson将其转换为java pojo。

重复。非常感谢。如何分多个步骤完成?我挠头已经有一段时间了,无法摆脱这个循环(我尝试过这样做,但有一件事我不明白。我想从第二个JSON中获取“文本”,它与第一个JSON具有相同的业务id。我在JSON2中没有真正获得评论(“文本”)(在我的示例中)我也尝试过
query.put(dbObject.get(“business_id”),“Text”);
您应该能够从cursor3-cursor3.next获取它().get(“text”)非常感谢!我让它工作了。我如何限制top3的结果?比如我可以说
System.out.println((cursor3.next().get(“text”)).limit(3));
,但这不起作用!