如何使用MongoDB API Java在数组中查找文档?

时间:2015-10-01 11:50:12

标签: java mongodb mongodb-query

这是我的代码

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上找到解决方案如何制作该声明。

1 个答案:

答案 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();

然后所有结果只返回匹配的数组元素而不是所有数组元素。