2013-07-09 73 views
0

这种类型的查询可能吗?

我需要在数据库中查询一组指定股票的指定日期的数据。所以数据需要有“这个”日期并且是“这些”符号之一。

我有以下代码:

public void findDateStockSet(String date, ArrayList<String> symbolSet) throws UnknownHostException { 
    this.stocks = this.getCollectionFromDB(); 
    BasicDBObject objectToFind = new BasicDBObject(); 
    List<BasicDBObject> obj = new ArrayList<BasicDBObject>(); 
    obj.add(new BasicDBObject("date", date)); 
    obj.add(new BasicDBObject("symbol", new BasicDBObject("$in", symbolSet))); 
    objectToFind.put("$and", obj); 


    DBCursor cursor = this.stocks.find(objectToFind); 

    System.out.println("Finding Stocks"); 
    while (cursor.hasNext()) { 
     System.out.println(cursor.next()); 
    } 
    System.out.println(); 
} 

这总是出现空。有人可以解释如何做出这样的查询吗?

+0

你可以把你的文件的例子吗? –

+0

{“$ oid”:“51dc5fc203646b5aa5ffaed2”},“date”:“20100223”,“symbol”:“aapl”,“open”:“199.91”,“high”:“201.33”,“低“:”195.71“,”关闭“:”197.059“,”音量“:”205468“} – moekler

+0

我只是认为我应该承认我在搜索查询中输入了错误的日期。这就是为什么我得到一个null。上面的代码和Miguel在下面的答案一样。 – moekler

回答

0

你不需要使用$和运营商,只是生成的查询,如下JSON:

{ "date" : "20100223", "symbol" : { $in : [ "appl", "goog" ] } } 

我喜欢用BasicDBObjectBuilder UTIL类构建DBObjects。所以你的查询将是:

DBObject query = BasicDBObjectBuilder.start() 
    .add("date", date) 
    .push("symbol") 
     .add("$in", symbolSet) 
    .get(); 
+0

谢谢米格尔!这是一种创建查询的简单方法,它可以完美运行! – moekler