2013-02-23 5 views
0

У меня есть запись, которая выглядит, как показано ниже:Mongoose найти последнюю запись

{ 
    "__v": 10, 
    "_id": "50f8050ed714645500000002", 
    "sid": "DI7gZ0sprJ", 
    "lines": [ 
    { 
     "text": "Well that's what some people say anyway", 
     "_id": "50f80526d714645500000003", 
     "user": "Player456" 
    }, 
    { 
     "text": "They're people just like the rest of us", 
     "_id": "50f805925543712caf000005", 
     "user": "Player123" 
    }, 
    ], 
    "title": "Test", 
    "maxlines": 0 
} 

и имеет socket.io сценарий, как показано ниже:

socket.on('sendchat', function (data) { 
    Story.findOne({ sid: socket.room }, function(err, story){ 
     if (err) { 
      console.log(err); 
     } 
     else if(story == null) { 
      console.log(err); 
     } 
     else { 
      io.sockets.in(socket.room).emit('updatechat', socket.username, data); 
      story.maxlines = story.maxlines - 1; 

      if (story.maxlines == 0) { 
       // End Game Script - Redirect to view page 
       io.sockets.in(socket.room).emit('gameover', slugs(story.title), socket.room); 
      } 
      //Save Story to DB 
      story.lines.push({ 
       user: socket.username, 
       text: data 
      }); 
      story.save(function(err, story){ 
       if (err) { 
        console.log(err); 
       } 
       else { 
        console.log("Story Updated"); 
       } 
      }); 
     }; 
    }); 
}); 

Есть ли способ, я могу проверить, если имя socket.us равно пользователю на самой новой строке, которая была введена?

В приведенном выше примере Player123 является последним ввести строку, так что если Player123 пытается снова он просто выдает ошибку, но если Player456 входит в линию, то Player123 может снова

Пытаюсь создайте простую пошаговую игру, которая проверяет, не может ли человек войти в строку, когда это не их очередь.

+0

В вашем вопросе нет вопросительного знака. – thejh

+0

@thejh похоже, что я сохранил представленный файл перед тем, как я завершил вопрос, обновленный сейчас – Tam2

ответ

1

Вы можете непосредственно проверить последнюю запись в массиве lines в объекте story. Как в:

if (story.lines.length && 
    story.lines[story.lines.length-1].user === socket.username) { 
    // error, same user is trying to enter another line 
} 
+0

Спасибо !, не понял, что я мог бы сделать это таким образом, я думал, что мне нужно сортировать и ограничивать объект истории. Но ваше решение отлично работало! – Tam2

+0

Есть ли способ проверить, является ли его первая запись? потому что в минуту, если ваш первый человек, входящий в строку, ошибается, потому что нет предыдущего, чтобы проверить, я думал что-то вроде этого? 'story.lines [story.lines.length-1] .user == socket.username && story.maxlines <10', но, похоже, не работает – Tam2

+0

@ Tam2 Конечно, только проверка, когда' lines' is not пустой. Обновленный ответ. – JohnnyHK

Смежные вопросы