我有来自存储在DBObject中的MongoDB的值。我需要将这个值逐个存储在一个集合中。作为MongoDB的新手,我实际上没有一致地想法如何继续下去。
String date = sdf.format(cal2.getTime()); List<String> dateList = new ArrayList<String>(); for (int i = 0; i < 6; i++) { Date dateParsed = sdf.parse(date); dateParsed.setDate(dateParsed.getDate() - i); dateList.add(sdf.format(dateParsed)); } Set<String> values2= new HashSet<String>(); for (String str : dateList) { BasicDBObject find1 = new BasicDBObject("_ky", str); DBObject values1= someDB.findOne(find1); Iterator iter = values1.iterator(); /*giving error the method not found (becasue values1 is a dbObject)*/ while (iter.hasNext()) { values2.add(//???//); } }
有关如何迭代DBObject
- values1
以及在set
- values2
中添加这些值的任何帮助都会很棒。
答案 0 :(得分:1)
您可以致电values1.keySet()
并迭代该get()
任意值,或使用values1.toMap()
并像对待任何其他值一样迭代Map
。
答案 1 :(得分:1)
Mongo Java Driver中的主要抽象是DBObject,它像Java的Map&lt; String,Object&gt;一样包装。
import java.util.Arrays;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
public class DBObjectKeySetDemo {
public static void main( String[] args ) {
DBObject dbo = new BasicDBObject( "firstName", "Robert" ).append( "lastName", "Kuhar" );
dbo.put( "age", 49 );
dbo.put( "hobbies", Arrays.asList( "Fly Fishing", "Board Games", "Roller Derby" ) );
DBObject browser = new BasicDBObject( "implementation", "Chrome" );
browser.put( "vendor", "Google" );
BasicDBList bookmarks = new BasicDBList();
bookmarks.add( new BasicDBObject( "name", "StackOverflow" ).append( "URL", "http://stackoverflow.com" ) );
bookmarks.add( new BasicDBObject( "name", "MMS" ).append( "URL", "https://mms.mongodb.com" ) );
browser.put( "bookmarks", bookmarks );
dbo.put( "browser", browser );
for ( String key : dbo.keySet() ) {
System.out.println( "key: " + key + " value: " + dbo.get( key ) );
}
System.out.println( "dbo: " + dbo );
}
}
“陷阱”是你只能直接使用“顶级”元素。例如,在上面的示例中,通过Java API,您无法直接引用“browser.vendor”。通过Java API,您必须先获取“浏览器”子文档,然后获取“供应商”字段。
清除?像泥一样?它帮助我将抽象视为Map&lt; String,Object&gt;其中,对于子文档,Object本身可以是Map&lt; String,Object&gt ;.