[英]Mongodb java find document and filter an array field (delete array data that don't match a condition)
我嘗試請求一個Collection,但是無法過濾嵌入式數組。 我想獲取集合中所有匹配{“ players.nick”:nick}的文檔,並過濾'players'數組以僅獲取搜索到的玩家。
這是初始文件:
{"_id":2000,"type":3,"prizepool":6520.5,"name":"XXX","start":1515701700,"end":1515719580,"buyin":2.25,"rake":0.5,"prize":0,"bounty":2.25,"players":[{"nick":"player1","rank":1,"cash":660.85,"kill":468.64,"ticket":0,"reentry":0},{"nick":"player2","rank":2,"cash":430.35,"kill":101.31,"ticket":0,"reentry":0},{"nick":"player3","rank":3,"cash":312.98,"kill":72.26,"ticket":0,"reentry":0},{"nick":"player4","rank":4,"cash":237.99,"kill":27.15,"ticket":0,"reentry":1}]}
在請求后,我想檢索:
{"_id":2000,"type":3,"prizepool":6520.5,"name":"XXX","start":1515701700,"end":1515719580,"buyin":2.25,"rake":0.5,"prize":0,"bounty":2.25,"players":[{"nick":"player1","rank":1,"cash":660.85,"kill":468.64,"ticket":0,"reentry":0}}
有誰知道如何用Java方式做到這一點?
謝謝 !
您可以在Java中使用以下聚合管道。
MongoClient mc = new MongoClient();
MongoDatabase db = mc.getDatabase(db);
MongoCollection col = db.getCollection(col);
對於單場比賽,您可以使用$elemMatch
投影
col.find().projection(Projections.fields(Projections.include("_id","type", "prizepool","name","start","end","buyin","rake","prize","bounty"),
Projections.elemMatch("players", Filters.eq("nick", "player1"))));
對於單場和多場比賽
Bson filter = new Document("players", Document.parse("{\n" +
" $filter: {\n" +
" input: \"$players\",\n" +
" as: \"player\",\n" +
" cond: { $eq: [ \"$$player.nick\", \"player1\" ] }\n" +
" }\n" +
" }"));
Bson addFields = new Document("$addFields", filter);
col.aggregate(Arrays.asList(addFields));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.