假设我们在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);
我没有得到任何东西。
答案 0 :(得分:1)
Mongo Shell find
function的语法是:
db.collection.find(query, projection)
查询 文档可选。使用查询运算符指定选择过滤器要返回集合中的所有文档,请省略此参数或传递空文档({})。
投影 文档可选。指定要在与查询过滤器匹配的文档中返回的字段。
在将其翻译为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());
鉴于您的问题中包含的示例文档,上面的代码将打印出来:
{
"shapes": [
{
"shape": "circle",
"color": "red"
}
]
}
这与db.test.find({"shapes.color": "red"}, {_id: 0, 'shapes.$': 1});
的输出相同。