如何在Mongo

时间:2015-05-16 13:12:50

标签: mysql mongodb

mlb_players是一个集合,dataId为字段,teamData为另一个包含teamIddataId的子文档。

等效的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"
  }
}

请建议。在此先感谢

2 个答案:

答案 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集合中的玩家。也许这就是没有得到任何文件的目的......