[英]MongoDB nested document queries with conditions
我試圖圍繞一些更復雜的MongoDB查詢工作。 我已經閱讀了一些與問題相關的問題,但是我還無法弄清楚哪種方法對於遇到的情況是最好的。例如,我正在嘗試用以下方法索引DVD的集合記錄了各種俱樂部足球比賽,我對集合中的文檔進行了建模,如下所示(略):
{
"dvdId" : "10021",
"dateSubmitted" : ISODate("2015-11-17T15:42:21.248Z"),
"featuredPlayerNames": [
"Sam B. Clement",
"John C. Carter",
"Gabriel M. Malinowski",
"Jimmy I. Vincent",
"George L. Spears",
"Roland M. Nelson",
],
"matches" : [
{
"startTime" : 0,
"winningTeamIndex": 0,
"teams" : [
{
"teamName": "Hornets",
"players" : [
{
"name" : "Sam B. Clement",
"position" : "striker"
},
{
"name" : "John C. Carter",
"position" : "halfback"
},
]
},
{
"teamName": "Hurricanes",
"players" : [
{
"name" : "Gabriel M. Malinowski",
"position" : "fullback"
},
{
"name" : "Jimmy I. Vincent",
"position" : "keeper"
},
]
}
]
},
{
"startTime": 5602,
"winningTeamIndex": 1,
"teams" : [
{
"teamName": "Raiders",
"players" : [
{
"name" : "Sam B. Clement",
"position" : "halfback"
},
{
"name" : "George L. Spears",
"position" : "striker"
},
]
},
{
"teamName": "Hurricanes",
"players" : [
{
"name" : "Roland M. Nelson",
"position" : "striker"
},
{
"name" : "Jimmy I. Vincent",
"position" : "keeper"
},
]
}
]
},
],
}
到目前為止我所做的。 我已經弄清楚了如何使它在第一級屬性和數組上執行一些簡單的操作,例如返回包含感興趣的播放器和/或另一個感興趣的播放器的DVD。 例如db.dvds.find({featuredPlayerNames: {$in: ['Sam B. Clement', 'John C. Carter']}});
。
我需要幫助的地方。 我現在試圖弄清楚如何用更復雜的操作來查詢Mongo數據庫,例如包含具有以下條件的匹配項的返回文檔:
完成此類高級查詢的最佳方法是什么? 在文檔中徘徊,並閱讀了類似的問題( 1 2 3 4 5 6 7 8 9 10 11 12 * 13 * )后,我發現可能需要使用$elemMatch
, $cond
, $in
, $all
, $match
, $unwind
, $group
和/或聚合框架,但除了不熟悉其中的許多方法外,我還看到了許多不同的觀點和方法,而且似乎並沒有真正將嵌套查詢與特定查詢結合在一起的方法。條件(例如獲勝球隊的球員或不同球隊的球員)。
現在,只要朝着正確的方向發展,我就可以學會做大部分的事情。 如果看來某些情況更適合我的情況,我也願意在這里重塑數據的結構(前提是我能夠像2v2v2那樣增加更多球隊參加比賽)。
謝謝!
通常,以允許簡單查詢的方式比編寫復雜查詢的方式更快,更輕松地構造數據。 重新格式化您的數據集可能是一次性的開銷,而昂貴的查詢可能會執行數百萬次。
你的問題:
希望有幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.