2016-06-12 2 views
0

Я пытаюсь получить поле _id самого последнего документа, введенного в коллекцию.Получите заданное поле из самого последнего документа в MongoDB

Я создал коллекцию под названием Номера:

Rooms = new Meteor.Collection('rooms'); 

и этот код должен получить самый последний элемент ограничивается одним:

Rooms.find({}, {fields: {'_id':1}}).sort({_id:-1}).limit(1) 

вместо этого, я получаю

Uncaught TypeError: Rooms.find(...).sort is not a function(…) 

Где я иду не так?

Solution (спасибо @aedm)


var roomID = Rooms.findOne({}, {fields: {_id: 1}, sort: {_id: -1}}); 
return roomID._id.toString(); 

ответ

1

Collection.find возвращает курсор, а не массив. Курсоры не имеют метода sort. Попробуйте следующие вместо:

Rooms.findOne({}, {fields: {_id: 1}, sort: {_id: -1}}); 

http://docs.meteor.com/api/collections.html#Mongo-Collection-find

Edit:

Как @MichelFloyd отметил, _id «s порожденные Метеор являются не сортируются в хронологическом порядке, как те, созданных самой MongoDB , Чтобы сортировать по дате создания, вам нужно будет сохранить эти метки времени в своей коллекции.

+0

Это замечательно! Есть ли способ заставить его возвращать необработанный текст id, вместо того, чтобы теперь возвращать объект? – bafrick

+0

Используйте 'myRoom._id.toString()'. – aedm

+2

'myRoom._id' уже строка, не нужно ее бросать. Кроме того, '_id' * не сортируется по времени * (если вы не управляете' _id 'самостоятельно). Собственный Meteor '_id' является случайной строкой. –

0

Прокомментировал бы, но еще не имеет репутации. Вы можете получить id как строку с: Rooms.findOne ({}, {fields: {_id: 1}, sort: {_id: -1}}) ._ id;

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