#node.js #mongodb #mongodb-query #mongodb-nodejs-driver
#node.js #mongodb #mongodb-запрос #mongodb-nodejs-driver
Вопрос:
Первый раз работаю с MongoDB. Этот запрос работает для меня в строке cmd:
db.secrets.update({_id: ObjectId("5f767cd481cea1687b3dbf86")}, {$set: {secret_rating: 5}})
Однако обновление записи с использованием по существу того же запроса на моем узловом сервере не завершает эту задачу при пинге. Я ошибаюсь, пытаясь запросить такую запись в моей модели? ObjectId, очевидно, не является родным для моего сервера.
db.secrets.update({_id: "5f767cd481cea1687b3dbf86"}, {$set: {secret_rating: 5}})
Ответ №1:
Предполагая, что вы используете драйвер Mongodb Nodejs, а не какой-либо ORM (поскольку он не был указан), возникают две проблемы:
- Насколько мне известно, если у вас есть объект подключения к нужной базе данных в
db
переменной, вы не можете напрямую ссылаться на коллекции, как вы это сделалиdb.secrets
; вместо этого вы должны использоватьcollection
метод, подобный so:
const secrets = db.collection("secrets");
secrets.find({
/*your query here*/
}).then((results) => {})
Итак, если вы не назначили db.secrets
with db.collection("secrets")
, вы должны получать сообщение об ошибке, Cannot read property "update" of undefined
. Но я собираюсь предположить, что у вас есть объект коллекции db.secrets
, поскольку вы не упомянули, что получаете эту ошибку.
- Похоже, вы используете строку вместо
ObjectID
объекта. Вы можете импортировать конструктор ObjectId из драйвера nodejs следующим образом:
const ObjectID = require('mongodb').ObjectID
Затем в вашем запросе вам нужно будет создать новый ObjectId, чтобы получить правильный результат:
db.collection("secrets").find({
_id: new ObjectID("5f767cd481cea1687b3dbf86")
}).then((results) => {})
ПРИМЕЧАНИЕ: ObjectID
конструктор выдаст ошибку, если предоставленная ему строка не является допустимой шестнадцатеричной строкой из 24 символов, поэтому, если вы получаете id
строку в качестве входных данных откуда-либо (скажем, как параметр в API или как аргумент командной строки), вы можете захотеть обернутьэто в функции, которая обрабатывает эту ошибку.