2016-06-12 10 views
0

Ich versuche, das Feld _id des zuletzt eingegebenen Dokuments in die Sammlung zu bekommen.Erhalte ein gegebenes Feld aus dem neuesten Dokument in MongoDB

Ich habe eine Sammlung namens Zimmer erstellt:

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

und dieser Code sollte den letzten Punkt auf einen beschränkt erhalten:

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

stattdessen ich

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

Wo gehe ich falsch?

Solution (dank @aedm)


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

Antwort

1

Collection.find einen Cursor zurückkehrt, kein Array. Cursor haben keine sort Methode. Versuchen Sie Folgendes statt:

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

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

Edit:

Wie @MichelFloyd wies darauf hin, _id ‚s erzeugt durch Meteor sind nicht chronologisch wie die von MongoDB erstellt sortiert sich . Um nach dem Erstellungsdatum zu sortieren, müssen Sie diese Zeitstempel in Ihrer Sammlung speichern.

+0

Das ist großartig! Gibt es eine Möglichkeit, um den Rohtext der ID zurückzugeben, anstatt ein Objekt wie es jetzt zurückgibt? – bafrick

+0

Verwenden Sie 'myRoom._id.toString()'. – aedm

+2

'myRoom._id' ist bereits eine Zeichenfolge, es ist nicht notwendig, sie zu übertragen. Auch '_id' ist * nicht nach Zeit sortiert * (es sei denn, Sie verwalten _id's selbst). Der native Meteor '_id' ist eine zufällige Zeichenfolge. –

0

Würde kommentiert haben, aber noch nicht die rep haben. Sie erhalten die ID als String mit: Rooms.findOne ({}, {fields: {_id: 1}, sort: {_id: -1}}) ._ id;

Verwandte Themen