我试图在node / express中创建一条路由,以从mongo db集合中获取数据,并且遇到了一个非常令人沮丧的问题。我有一个名为case
的集合,并尝试编写以下路线:
select avg(case when a > 2 then 1.0 else 0 end)
from t;
我删除了其余不重要的GET。当我启动节点,并在本地主机上的浏览器URL中输入路由时,我在终端中收到以下输出:
nba_players_v2
很显然,router.get('/shotcharts-v2/player/:player/season/:season', function(req, res) {
let player_id = req.params.player;
let season_id = req.params.season;
console.log('playerid:', player_id, ' seasonid:', season_id);
db.nba_players_v2.findOne({'_id': player_id}, function(err, player) {
if (err) res.send(err);
if (player) {
console.log('player', player)
console.log('typeof', typeof(player))
console.log('keys', Object.keys(player))
console.log('player firstname', player.firstName)
let i = 0;
for (var prop in player) {
console.log(i, ': ', prop)
}
...
}
}
}
函数正在工作,因为Express server is up and running on 8080 or process.env.PORT!
playerid: 9218 seasonid: 1617
player { _id: '9218',
firstName: 'Stephen',
lastName: 'Curry',
birthDate: '1988-03-14',
birthCity: 'Akron, OH',
birthCountry: 'USA',
highSchool: 'Charlotte Christian',
college: 'Davidson College',
officialImageSrc: 'https://ak-static.cms.nba.com/wp-content/uploads/headshots/nba/latest/260x190/201939.png',
handednessShoots: 'R',
FullName: 'Curry-Stephen' }
typeof object
keys [ '$__', 'isNew', 'errors', '_doc', '$init' ]
player firstname undefined
1 ': ' '$__'
2 ': ' 'isNew'
3 ': ' 'errors'
4 ': ' '_doc'
5 ': ' '$init'
6 ': ' 'db'
7 ': ' 'discriminators'
8 ': ' '__v'
9 ': ' 'id'
10 ': ' 'schema'
11 ': ' 'collection'
12 ': ' '$__save'
13 ': ' '$__validate'
14 ': ' '$__remove'
15 ': ' '$__init'
16 ': ' '$isMongooseModelPrototype'
17 ': ' '$__handleSave'
18 ': ' 'save'
19 ': ' '$__delta'
20 ': ' '$__version'
21 ': ' 'increment'
22 ': ' '$__where'
23 ': ' 'remove'
24 ': ' 'model'
25 ': ' 'on'
26 ': ' 'once'
27 ': ' 'emit'
28 ': ' 'listeners'
29 ': ' 'removeListener'
30 ': ' 'setMaxListeners'
31 ': ' 'removeAllListeners'
32 ': ' 'addListener'
33 ': ' '$__buildDoc'
34 ': ' 'toBSON'
35 ': ' 'init'
36 ': ' 'update'
37 ': ' '$set'
38 ': ' 'set'
39 ': ' '$__shouldModify'
40 ': ' '$__set'
41 ': ' 'getValue'
42 ': ' 'setValue'
43 ': ' 'get'
44 ': ' '$__path'
45 ': ' 'markModified'
46 ': ' 'unmarkModified'
47 ': ' '$ignore'
48 ': ' 'modifiedPaths'
49 ': ' 'isModified'
50 ': ' '$isDefault'
51 ': ' '$isDeleted'
52 ': ' 'isDirectModified'
53 ': ' 'isInit'
54 ': ' 'isSelected'
55 ': ' 'isDirectSelected'
56 ': ' 'validate'
57 ': ' 'validateSync'
58 ': ' 'invalidate'
59 ': ' '$markValid'
60 ': ' '$isValid'
61 ': ' '$__reset'
62 ': ' '$__dirty'
63 ': ' '$__setSchema'
64 ': ' '$__getArrayPathsToValidate'
65 ': ' '$__getAllSubdocs'
66 ': ' '$__handleReject'
67 ': ' '$toObject'
68 ': ' 'toObject'
69 ': ' 'toJSON'
70 ': ' 'inspect'
71 ': ' 'toString'
72 ': ' 'equals'
73 ': ' 'populate'
74 ': ' 'execPopulate'
75 ': ' 'populated'
76 ': ' 'depopulate'
77 ': ' '$__fullPath'
正在打印出玩家的对象(在这种情况下,有关Steph Curry的一些信息)。但是,当我尝试findOne()
的名字(在console.log(player)
中为是关键字)时,我收到未定义的信息。
player.firstName返回未定义并不是特别重要,但是在此console.log()
函数的其余部分中使用的其他键也返回未定义。
这是数据库中nba_players_v2集合内相关对象(Steph的对象)的屏幕快照(Robo 3T的屏幕截图):
如果不解决此问题,我将无法使我的应用正常运行,因此请帮助。让我知道我是否可以分享任何其他信息(有助于解决此问题)(更多player
)!我是Web开发人员的新手,我很难独自管理整个堆栈,而这样的错误无济于事!
编辑:mongo DB _id是否仅在单个集合中需要唯一,或者在整个数据库中必须唯一?不太可能是问题,只是在想...
Edit2:数据库中的_id键应该为router.get
类型,而不是console.log()
类型吗?我手动创建了_id列(在R中,在使用mongolite插入mongo db之前),并且显然在这里键入string。