mlb_players
是一个集合,dataId
为字段,teamData
为另一个包含teamId
和dataId
的子文档。
等效的MySql:SELECT p.playerId FROM mlb_players p INNER JOIN mlb_teams t ON p.dataId=t.dataId
我想将此mysql查询转换为等效的mongoDB。
目前我在mongo查询下方使用但出错:
db.getCollection('mlb_players').find({$where: "this.dataId == this.teamData.dataId"});
但它给了我0条记录,但是mysql中的相同数据给出了我的50条记录。
作为参考,文档中的1表示如下:
{
"_id" : ObjectId("55574d05e03ce60f64797432"),
"dataId" : "87c484cc-e672-4a34-ab02-cc29101d8a52",
"teamId" : "TB",
"posId" : "SS",
"playerName" : "Nick Franklin",
"playerNameAbbr" : "N. Franklin",
"playerJersey" : 2,
"playerStatus" : "D",
"playerSalary" : 5500,
"salarySuggest" : 0,
"playerProj" : 0.0,
"playerAvg" : 0.0,
"manualSalary" : 1,
"playerImg" : 0,
"hasImage" : 0,
"used" : 0,
"teamData" : {
"_id" : ObjectId("554239eb4e7235204100002a"),
"teamId" : "TB",
"dataId" : "87c484cc-e672-4a34-ab02-cc29101d8a52",
"teamName" : "Tampa Bay Rays",
"teamAbbr" : "TB"
}
}
请建议。在此先感谢
答案 0 :(得分:1)
您可以使用aggregation和$eq
运算符
db.mlb_players.aggregate(
[
{ $project: { "m": { $eq: [ "$dataId", "$teamData.dataId" ]}}},
{ $match: { "m": true }},
{ $project: { "_id": 1 }}
]
)
答案 1 :(得分:0)
在第一句话中,您写道您拥有players
集合,但您的查询会查找mlb_players
集合中的玩家。也许这就是没有得到任何文件的目的......