如何在Java中迭代DBObject值

时间:2014-06-02 18:16:59

标签: java string mongodb

我有来自存储在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中添加这些值的任何帮助都会很棒。

2 个答案:

答案 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 ;.