Я пытаюсь создать маршрут в узле / экспрессе, который собирает данные из коллекции dong монго, и столкнулся с очень неприятной проблемой.У меня есть коллекция с именем 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)
}
...
}
}
}
Я удалил остальную часть GET, что не важно.Когда я запускаю узел и набираю маршрут в URL-адресе браузера на localhost, я получаю следующий вывод в терминале:
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'
Ясно, что функция findOne()
работает, так как console.log(player)
распечатка объекта игрока (в данном случае некоторая информация о Steph Curry).Однако, когда я пытаюсь console.log()
имя (которое является ключом в player
), я получаю undefined.
Не особенно важно, что player.firstName возвращает undefinedОднако есть и другие ключи, которые также возвращают undefined, которые я использую в оставшейся части этой router.get
функции, которые также возвращают undefined.
Вот снимок экрана соответствующего объекта (объекта Steph) внутри коллекции nba_players_v2в моей базе данных (скриншот Robo 3T):
Я не могу заставить свое приложение работать без решения этой проблемы, поэтому, пожалуйста, помогите.Дайте мне знать, если я смогу поделиться какой-либо другой информацией (больше console.log()
), которая поможет решить эту проблему!Я новичок в веб-разработке, и самостоятельно управлять полным стеком сложно, и подобные ошибки не помогают!
Редактировать: моно DB _ids должны быть уникальными только в пределах одной коллекции или должныбыть уникальным во всей базе данных?вряд ли проблема, но просто думать ...
Edit2: должен ли ключ _id в базе данных иметь тип ObjectId
, а не тип string
?Я вручную создал столбец _id (в R, перед тем, как вставить его в mongo db с помощью mongolite), и это явно строка типа здесь.