агрегатная функция монго не работает с сокетом io - PullRequest
0 голосов
/ 02 ноября 2018

Привет! Я пытаюсь выполнить запросы MongoDB внутри сокета io functions.indOne работает правильно, но функции поиска и агрегирования не работают вообще. Ввод кода здесь

mongo.connect('mongodb://localhost:27017', function (err, client) {
    const db = client.db('dbName');

    const bookWalker = db.collection('bookwalkers');
    const walker = db.collection('walkers');


    io.sockets.on('connection', function (socket) {
        socket.on('enterRoom', function (data) {
            socket.room = data.room;
            socket.join(data.room);
            console.log("connected to room", data.room);

            bookWalker.find({"pendingWalk._id":
                   ObjectId("5bd994d2f395622e0b8f71af")},async function(err,resp)  {
                       console.log("dataf",resp);
                       io.sockets.in(data.room).emit('getStartTime', resp[0]);
             });
       });
 });

});

Это пример данных в БД

{
"_id" : ObjectId("5bd994d2f395622e0b8f71ad"),
"pendingWalk" : [ 
    {
        "walkPicture" : [],
        "status" : 0,
        "walkPath" : [],
        "_id" : ObjectId("5bd994d2f395622e0b8f71af"),
        "bookedDate" : ISODate("2018-10-31T13:30:56.581Z"),
        "bookedTime" : ""
    }
],
"userId" : ObjectId("5b6e932062bce05ae5647980"),
"book_dt" : ISODate("2018-10-31T11:41:06.230Z"),
"__v" : 0}

запрос нормально работает внутри оболочки монго.

1 Ответ

0 голосов
/ 02 ноября 2018

mongodb find () возвращает курсор, а не массив. Вы должны вызвать функцию toArray ().

    bookWalker.find({"pendingWalk._id":ObjectId("5bd994d2f395622e0b8f71af")}).toArray(function(err,resp){
     console.log(resp[0]);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...