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();
}

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

4

1 回答 1

1

您不需要使用 $and 运算符,只需将查询构建为以下 json:

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

我喜欢使用BasicDBObjectBuilderutil 类来构建 DBObjects。所以您的查询将是:

DBObject query = BasicDBObjectBuilder.start()
    .add("date", date)
    .push("symbol")
        .add("$in", symbolSet)
    .get();
于 2013-07-09T19:51:37.747 回答