2016-11-03 4 views
1

У меня есть коллекция называется уведомление и я пытаюсь получить одно значение с findOne()Ошибка получения одного значения из коллекции

var allnotices = Notifications.findOne({eventownernumber:"2"},{sort: {noticedate: -1, limit: 1}}).noticemessage; 

Я хочу, чтобы получить значение, где eventownernumber является 2 и я хочу получить последнюю запись, и мне нужна только одна запись.

Несмотря на то, что noticemessage является частью полей строки, я получаю сообщение об ошибке, которое noticemessage не определено.

Это схема

{ 
    "_id": "tmkWCydSKZtYdrKTZ", 
    "eventoriginalid": "3bXvARk6K6yhee6Hi", 
    "lat": "-1.851881824302658", 
    "lng": "96.987469482421875", 
    "eventownernumber": "1", 
    "eventownernames": "Test 1", 
    "eventtitle": "ci", 
    "eventtime": "08:05", 
    "invited": "0", 
    "eventduration": "21", 
    "eventtype": "notification", 
    "eventcategory": "hackathon", 
    "eventstatus": "11", 
    "createdAt": { 
     "$date": "2016-11-02T12:38:40.378Z" 
    }, 
    "noticedate": { 
     "$date": "2016-11-02T16:50:53.394Z" 
    }, 
    "noticenumber": "2", 
    "noticenames": "Test 2", 
    "noticemessage": "Test 2 has joined your event ci", 
    "noticestatus": "12" 
} 

Почему noticemessage неопределенными ?.

+0

является то, что выше JSON результат вашего 'console.log (allnotices);'? – Beginner

+0

может быть «eventownernumber»: «1» в коллекции поиска? – Veeram

ответ

0

есть четыре основные возможности, почему Collection.findOne(query).key могут дать ошибку:

  1. Существует ни одного документа, соответствующий запрос поэтому вы пытаетесь ссылаться undefined.key
  2. ключа в вопросе не существует в возвращаемом документе
  3. документ существует в базе данных, но не является опубликованные сервером и, на которые подписана клиент
  4. Документ существует и опубликован и подписан, но подписка еще не установлена ​​.ready(), то есть вам нужно подождать, прежде чем вы сможете получить к ней доступ.

Общая оборонительная картина:

const oneDoc = myCollection.findOne(query); 
let myVar = oneDoc && oneDoc.key; 
if (myVar) { 
    // do the thing 
} else { 
    // handle the error 
} 
0

Вам необходимо сохранить число как целое число для eventownernnumber (и, пожалуйста, напишите его как eventOwnerNumber, что является хорошей практикой для удобочитаемости), а не строки. Либо использовать input type="number" или преобразовать значение в целое, как это:

Number(valueHere); 

Остальная часть запроса выглядит хорошо для меня, но вам не нужно предела, так как вы делаете findOne() и вы найдете новейший вставленный документ с noticedate: -1

Другое дело, что вам нужно, чтобы сохранить дату, как это в вашем insert():

noticeDate: new Date() //your current query should give you the right document after this change 
+1

предложение: также используйте msavin: mongol package, если вы этого не сделаете. Его чрезвычайно полезный – Luna

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