0
MongoDB中比較文檔字段我有類似下面的文檔的集合:聚集管道
{ name : "John" ,
age : 25.0 ,
bornIn : "Milan" ,
city : [ {
name : "Roma" ,
state : "IT" ,
mayor : "John"
}]
}
{ name : "Jim" ,
age : 35.0 ,
bornIn : "Madrid" ,
city : [ {
name : "Madrid" ,
state : "ESP" ,
mayor : "Jim"
}]
}
我想檢索所有具有場$ bornIn等於場$ city.name的文件。我需要做這個作爲管道的中間階段,所以我不能使用$ where操作符。
我在網上搜索,我發現了一個建議,實施這樣的事情:
{ $project:
{ matches:
{ $eq:[ '$bornIn', '$city.name' ] }
}
},
{ $match:
{ matches:true }
})
但因爲它標誌着領域的不同它沒有既不通過shell也通過Java驅動程序。 爲了完整起見,我報我的代碼:
final DBObject eq = new BasicDBObject();
LinkedList eqFields = new LinkedList();
eqFields.add("$bornIn");
eqFields.add("$city.name");
eq.put("$eq", eqFields);
projectFields.put("matches", eq);
final DBObject proj = new BasicDBObject("$project", projectFields);
LinkedList agg = new LinkedList();
agg.add(proj);
final AggregationOutput aggregate = table.aggregate(agg);
你有什麼建議嗎?我正在使用MongoDB 3.2,並且需要通過Java Driver來完成。
謝謝!
PS。這是不相關的,但實際上上面的文件是集合「城市」和「人員」之間的$ lookup階段的輸出,加入$ name/$市長..它是超級酷! :d:d
Yeeeeeess !!它解決了我的問題!我完全忘記了$ unwind操作符的存在!謝謝,謝謝,謝謝! – cartoonheart91
@ cartoonheart91沒問題。不要忘記upvote所以我可以駭莫網絡點 –
我試圖弄清楚這一點,沒有想到$ unwind。尼斯。 – inspired