Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java仅检索MongoDB中对象数组中的查询元素_Java_Mongodb_Mongodb Java - Fatal编程技术网

使用java仅检索MongoDB中对象数组中的查询元素

使用java仅检索MongoDB中对象数组中的查询元素,java,mongodb,mongodb-java,Java,Mongodb,Mongodb Java,假设我们在MongoDB集合中有以下文档: { "_id":ObjectId("562e7c594c12942f08fe4192"), "shapes":[ { "shape":"square", "color":"blue" }, { "shape":"circle", "color":"red" } ] }, { "_id":Ob

假设我们在MongoDB集合中有以下文档:

{  
   "_id":ObjectId("562e7c594c12942f08fe4192"),
   "shapes":[  
      {  
         "shape":"square",
         "color":"blue"
      },
      {  
         "shape":"circle",
         "color":"red"
      }
   ]
},
{  
   "_id":ObjectId("562e7c594c12942f08fe4193"),
   "shapes":[  
      {  
         "shape":"square",
         "color":"black"
      },
      {  
         "shape":"circle",
         "color":"green"
      }
   ]
}
MongoDB查询是

db.test.find({"shapes.color": "red"}, {_id: 0, 'shapes.$': 1});
有人能告诉我如何用Java编写它吗

我正在使用:

List<BasicDBObject> obj = new ArrayList<>();
obj1.add(new BasicDBObject("shapes.color", "red"));
List<BasicDBObject> obj1 = new ArrayList<>();
obj2.add(new BasicDBObject("shapes.$", "1"));

BasicDBObject parameters1 = new BasicDBObject();
parameters1.put("$and", obj1);

DBCursor cursor = table.find(parameters1,obj2).limit(500);
List obj=new ArrayList();
添加(新的基本对象(“形状.颜色”,“红色”));
List obj1=新的ArrayList();
添加(新的基本对象(“shapes.$”,“1”);
BasicDBObject参数1=新的BasicDBObject();
参数1.put(“$and”,obj1);
DBCursor=table.find(参数1,obj2).limit(500);
我什么也没有得到。

的语法是:

db.collection.find(查询、投影)

查询文档可选。使用查询运算符指定选择筛选器。若要返回集合中的所有文档,请忽略此参数或传递空文档({})

投影文档可选。指定要在与查询筛选器匹配的文档中返回的字段

当将其转换为由Mongo Java驱动程序执行时,您需要为其构建单独的
BasicDBObject
实例

  • 询问
  • 投影
下面是一个例子:

MongoCollection<Document> table = ...;

// {"shapes.color": "red"}
BasicDBObject query = new BasicDBObject("shapes.color", "red");

// {_id: 0, 'shapes.$': 1}
BasicDBObject projection = new BasicDBObject("shapes.$", "1").append("_id", 0);

FindIterable<Document> documents = table
    // assign the query
    .find(query)
    // assign the projection
    .projection(projection);

System.out.println(documents.first().toJson());

这与db.test.find({“shapes.color”:“red”},{u id:0,'shapes.$':1})的输出相同

不要使用列表。只需为每个查询和投影创建一个BasicDBObject,并将其传递给find。类似于
BasicDBObject obj=新的BasicDBObject(“shapes.color”、“red”);BasicDBObject obj1=新的BasicDBObject(“形状.$”,“1”);DBCursor=table.find(obj,obj1).limit(500)
{
  "shapes": [
    {
      "shape": "circle",
      "color": "red"
    }
  ]
}