0
這裏是我的代碼如何使用MongoDB API Java在數組中找到文檔?
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", "[email protected]")).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" : "[email protected]",
"phone" : "12345"
},
{
"firstname" : "Arnold",
"lastname" : "Schwarzenegger",
"email" : "[email protected]",
"phone" : "12345"
}]
}
我bassically想在電子郵件等於[email protected]用戶的文件,但它返回整個文檔與數組爲一體。我認爲問題是eq方法中的第一個參數,但我無法在google上找到解決方案。
[只檢索MongoDB集合中的對象數組中的查詢元素]可能的副本(http://stackoverflow.com/questions/3985214/retrieve-only-the-queried-element-in-an-object-array -in-mongodb-collection)這是一個常見的問題,在這裏解釋了很多可能的解決方案。在你的情況下,基本的意思是在投影中使用位置'$'操作符。 –
我認爲他們正在使用'BasicDBObject',如果您使用'.getDB()'方法,則會使用該方法,但不推薦使用此方法,因此我必須使用返回MongoDatabase的'.getDatabase()'。 – marcmaann
位置'$'操作符與任何棄用的操作無關,因爲它是一個基本構造。在投影中,這告訴MongoDB只返回數組的第一個匹配元素。其他解決方案有多種聚合用途來返回「多個」匹配。查找在查詢中使用「投影」字段。這些解決方案擴展了所有的語言和驅動程序,因爲這只是MongoDB的基本方式。 –