用Java实现MongoDB查询

用Java实现MongoDB查询,java,mongodb,nested,Java,Mongodb,Nested,我在MongoDB中有以下数据库结构(见下文),我想对字段“name”进行搜索查询 数据库结构: { "_id" : ObjectId("505ad9a7ed5022cbe1f3dc2e"), "id" : "10", "description" : "", "members" : [{ "id" : "1", "name"

我在MongoDB中有以下数据库结构(见下文),我想对字段“name”进行搜索查询

数据库结构:

         {
            "_id" : ObjectId("505ad9a7ed5022cbe1f3dc2e"),
            "id" : "10",
            "description" : "",  
            "members" : [{
              "id" : "1",
              "name" : "Jack" 
            }, {
              "id" : "2",
              "name" : "Mike" 
            }, {
              "id" : "3",
              "name" : "Laura" 
            }, {
              "id" : "4",
              "name" : "Sara" 
            }, {
              "id" : "240",
              "name" : "Ronald" 
            }],
            "status" : "active"
        },  
        {
            "_id" : ObjectId("5059c214707747cbc5819f6f"),
            "id" : "12",
            "description" : "",  
            "members" : [{
              "id" : "19",
              "name" : "Geoff" 
            }, {
              "id" : "21",
              "name" : "Andrew" 
            }, {
              "id" : "23",
              "name" : "Rachel" 
            }, {
              "id" : "25",
              "name" : "Susan" 
            }],
            "status" : "active"
        },  
我有以下代码将在“描述”或“状态”字段上进行搜索。DBCollection=database.getCollection(“成员”)

问题是,我将如何在“members.name”字段上执行OR搜索?因此,如果我搜索名称或文本“Laura”,则id为10的文档/记录将出现在结果集中

我是否需要循环查看所有结果或类似的内容


谢谢你的帮助和建议

如果我理解正确的话,这实际上是一个关于如何在数组中搜索单个字段的问题。使用相关字段的完整路径。在本例中,它是“members.name”


现在,如果您想和成员名称一起查找包含两个特定成员的记录,只需将单个查询放入BasicDBList,就像您使用OR,然后将它们放在一起一样。如果要包含其他或查询列表,只需将该查询对象(在上面的代码示例中使用)放入要包含在AND中的基本列表中即可。

对不起,我的意思是:问题是,如何在“members.name”字段上执行AND搜索,
$和
搜索是默认的。e、 g.连接查询时,这些查询将被AND。只有在组合
$和
以及
$或
查询时,才显式使用
$和
才有用-也许您可以编辑您的问题,以便更好地了解您尝试执行哪种类型的$和查询
        BasicDBObject or1 = new BasicDBObject(); 
        or1.put("description",  Pattern.compile(keyword, Pattern.CASE_INSENSITIVE)); 

        BasicDBObject or2 = new BasicDBObject(); 
        or2.put("status",  Pattern.compile(keyword, Pattern.CASE_INSENSITIVE));         

        BasicDBList or = new BasicDBList();
        or.add(or1); 
        or.add(or2);        

        BasicDBObject query = new BasicDBObject(); 
        query.put("$or", or);

        BasicDBObject select = new BasicDBObject();
        select.put("description", 1);  
        select.put("status", 1);    
        DBCollection collection = collection.find(query, select);