Почему mongo findById не работает, а _id совпадает? - PullRequest
0 голосов
/ 30 сентября 2019

Я работаю над кодом, который переносит объекты из базы данных на одном сервере в базу данных на другом сервере, и я сохраняю объект в базе данных с помощью

db.collections.users.insertOne(userObj)

Если процесспрерывается, мне нужно проверить, был ли объект уже сохранен. Я обнаружил, что в зависимости от того, как я ищу, я получаю разные результаты!

User.findById(userObj._id).exec() // null
User.findOne({_id: userObj._id}).exec() // null
User.findOne({username: userObj.username}).exec() // m8
User.findById(new mongoose.Types.ObjectId(userObj._id)).exec() // null
db.collections.users.findOne({_id: userObj._id}) // m8
db.collections.users.findOne({_id: new mongoose.Types.ObjectId(userObj._id)}) // null
db.collections.users.findOne({username: userObj.username}) // m8

Сначала я думал, что схожу с ума, но ... (см. Также мой ответ)

1 Ответ

0 голосов
/ 30 сентября 2019

... оказывается, что можно вставить объект со строкой вместо ObjectID! И это приведет к сбою findById(id) и findOne({_id: ObjectId(id)}).

Когда я добавил эту строку перед сохранением ...

userObj._id = new mongoose.Types.ObjectId(userObj._id)

... теперь все эти поиски находят документ! \ о /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...