我试图绕过一些更复杂的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 {{ 3}} 8 9 10 11
12*),我发现我可能需要使用$elemMatch
,$cond
,$in
,$all
,$match
,{{ 1}},$unwind
和/或聚合框架,但除了不熟悉其中的许多内容之外,我还看到了很多不同的意见和方法,而且似乎没有一个真正将嵌套查询与特定结合起来条件(如获胜球队的球员或不同球队的球员)。
现在我可以学习如何在正确的方向上推动大部分工作。如果看起来某些内容对我的情况更有效,我也可以在这里重新构建数据结构(前提是我可以像2v2v2那样为匹配添加更多团队)。
谢谢!
答案 0 :(得分:2)
通常,以允许简单查询而不是编写复杂查询的方式构建数据更快更容易。重新格式化数据集可能是一次性成本,而昂贵的查询可能会执行数百万次。
您的问题:
希望有帮助...