Запрос Mongodb для ObjectID возвращает ноль - PullRequest
1 голос
/ 04 мая 2019

Следующий метод должен запросить в разговорном собрании запись с заданным ObjectID.

const mongodb = require('mongodb')
const ObjectID = mongodb.ObjectID


app.get('/getConversations', (req, res) => {
    verifyUser(req, res, function(result) {
        if(result !== "false") {
            for(var i=0; i<result.conversations.length; i++) {
                var objectid = new ObjectID(result.conversations[i].toString())
                conversationCollection.findOne({_id: objectid}, function(res2) {
                    console.log(res2.members)
                    res.end(res2)
                })
            }
        } else {
            res.end("Error")
        }
    })
})

Объект результата имеет, например, следующие данные:

{ 
  // ...
  conversations: [ 5ccdc51d22399918b45b33d4,
                   5ccdc52322399918b45b33d6 ],
  // ...
}

Проблема в том, что console.log(res2.members) всегда выбрасывает TypeError: Cannot read property 'members' of null. Запрос для метода findOne неверен. Я уже пробовал несколько вариантов:

conversationCollection.findOne({"_id": objectid}, function(res2)
conversationCollection.findOne({_id: new ObjectID(result.conversations[i].toString())}, function(res2)
conversationCollection.findOne({"_id": ew ObjectID(result.conversations[i])}, function(res2)
conversationCollection.findOne({"_id": result.conversations[i]}, function(res2)

Ничего не работает, и каждый вариант выдает одно и то же исключение nullpointer.

1 Ответ

0 голосов
/ 06 мая 2019

Это потому, что res2 содержит данные об ошибках, которые являются нулевыми.Функция findOne имеет два параметра в обратном вызове: 1-й - ошибка, а другой - данные.любой из них является нулевым.

попробуйте это:

app.get('/getConversations', (req, res) => {
    verifyUser(req, res, function(result) {
        if(result !== "false") {
            for(var i=0; i<result.conversations.length; i++) {
                var objectid = new ObjectID(result.conversations[i].toString())
                conversationCollection.findOne({_id: objectid}, function(err,res2) {
                    console.log(err)
                    console.log(res2.members)
                    res.end(res2)
                })
            }
        } else {
            res.end("Error")
        }
    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...