java查询mongodb,某个查询条件是一个数组,怎么实现

{ "_id" : ObjectId("5a5ec3cd50a8xxxxxxdb82"), "date" : "2018-01-17 11:32:29", "type" : "A", "id" : "xxx001"}
{ "_id" : ObjectId("5a5ec3cd50a8xxxxxxdb82"), "date" : "2018-01-17 11:32:29", "type" : "A", "id" : "xxx001"}
{ "_id" : ObjectId("5a5ec3cd50a8xxxxxxdb82"), "date" : "2018-01-17 11:32:29", "type" : "B", "id" : "xxx001"}
{ "_id" : ObjectId("5a5ec3cd50a8xxxxxxdb82"), "date" : "2018-01-17 11:32:29", "type" : "C", "id" : "xxx001"}
{ "_id" : ObjectId("5a5ec3cd50a8xxxxxxdb82"), "date" : "2018-01-17 11:32:29", "type" : "C", "id" : "xxx001"}
{ "_id" : ObjectId("5a5ec3cd50a8xxxxxxdb82"), "date" : "2018-01-17 11:32:29", "type" : "C", "id" : "xxx001"}
{ "_id" : ObjectId("5a5ec3cd50a8xxxxxxdb82"), "date" : "2018-01-17 11:32:29", "type" : "A", "id" : "xxx002"}

根据id和type去查询,其中type可能多个也可能没有,只用id查询:
比如:
id=xxx001的所有记录-这个好弄
id=xxx001且type=A的所有记录-这个也好弄

id=xxx001且type=A和B的所有记录-这个怎么实现
id=xxx001且type=C和B的所有记录-这个怎么实现

现在用下面的方式,但是type是多个条件就不管用了,只能一个
data.put("id", "xxx001");
data.put("type", "A"); //这里只能填一个,不好多个
basicDBObject = new BasicDBObject(data);
FindIterable<Document> iter = document.find(basicDBObject);

求解各位大神,java实现
谢谢

阅读 3k
1 个回答

Google一下都有现成的:MongoDB Java: Finding objects in Mongo using QueryBuilder $in operator returns nothing

public static void getDocuments(List<Integer> documentIds) {
    BasicDBList docIds = new BasicDBList();
    docIds.addAll(documentIds)
    DBObject inClause = new BasicDBObject("$in", docIds);
    DBObject query = new BasicDBObject("Id", inClause);
    DBCursor dbCursor = mongoRule.getDatabase().getCollection("mycollection").find(query);
    System.out.println(dbCursor == null);
    if (dbCursor != null) {
        while (dbCursor.hasNext()) {
            System.out.println("object -  " + dbCursor.next());
        }
    }
}

我注意到你的_id全是一样的,所以你是不是已经使用$unwind把一个数组展开了?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题