这是我的代码
ServerAddress sa = new ServerAddress("localhost", 27017);
MongoClient mongoClient = new MongoClient(sa);
MongoDatabase db = mongoClient.getDatabase("waitinglist");
MongoCollection<Document> coll = db.getCollection("users");
MongoCursor<Document> f = coll.find(eq("users.email", "marc@berger.com")).iterator();
try {
while (f.hasNext()) {
System.out.println("Mongo Cursor: " +f.next().toJson());
}
} finally {
f.close();
}
这是我的收藏品的样子:
{
"_id" : ObjectId("560b8b76a37991ab2d650ca9"),
"users" : [
{
"firstname" : "Marc",
"lastname" : "Berger",
"email" : "marc@berger.com",
"phone" : "12345"
},
{
"firstname" : "Arnold",
"lastname" : "Schwarzenegger",
"email" : "pumping@iron.com",
"phone" : "12345"
}]
}
我低音希望在电子邮件等于marc@berger.com的用户处获取文档,但它将整个文档与数组一起返回。我认为问题是eq方法中的第一个参数,但是我无法在google上找到解决方案如何制作该声明。
答案 0 :(得分:2)
您在投影中使用positional $
运算符,以便仅返回数组的匹配元素。这使用.projection()
上的.find()
方法和MongoDB 3.x java驱动程序:
MongoCursor<Document> f = coll.find(eq("users.email", "marc@berger.com"))
.projection(new Document("users.$",1)).iterator();
然后所有结果只返回匹配的数组元素而不是所有数组元素。