2011-04-26 14 views
17

Estoy tratando de "transmitir" los datos de una instancia de node.js/MongoDB al cliente utilizando websockets. Todo está funcionando bien.Identificar el último documento de MongoDB find() conjunto de resultados

¿Pero cómo identificar el último documento en el resultado? Estoy usando node-mongodb-native para conectarme a MongoDB desde node.js.

Un ejemplo simplificado:

collection.find({}, {}, function(err, cursor) { 
    if (err) sys.puts(err.message); 

    cursor.each(function(err, doc) { 
    client.send(doc); 
    });     
}); 
+0

esto podría no ser el mejor enfoque para la transmisión de documentos del DB-por ejemplo. ¿Qué sucede si los documentos se insertan más rápido de lo que puede consultarlos de esta manera? Consulte http://docs.mongodb.org/manual/tutorial/create-tailable-cursor/ –

Respuesta

28

Desde mongodb objectId contatins fecha de creación se puede ordenar por ID, descendente y luego usar fin de carrera (1):

db.collection.find().sort({ _id : -1 }).limit(1); 

Nota: No estoy familiarizado con node.js en absoluto, el comando anterior es el comando mongo shell y supongo que puede reescribirlo fácilmente en node.js.

+1

No es el caso cuando los objetos se crean con más frecuencia que un segundo, porque ObjectId contiene un valor de 4 bytes que representa los ** segundos ** desde la época de Unix. –

+2

@EddieJamsession En teoría, sí, pero ¿has probado esto? –

+0

db.collection.find(). Limit (1) .sort ({_id: -1}); // justo ahora lo he probado ... sort debería ser el último método. –

1

Say I have companies collection. A continuación, el fragmento me da el último documento de la colección.

db.companies.find ({}, {"_ id": 1}). Skip (db.companies.find(). Count() - 1);

El código no puede depender de _id, ya que puede no estar en un patrón específico siempre si se trata de un valor definido por el usuario.

0

Uso clasificar y límite, si desea utilizar el cursor:

var last = null; 
var findCursor = collection.find({}).cursor(); 
findCursor.on("data", function(data) { 
    last = data; 
    ... 
}); 
findCursor.on("end", function(data) { 
    // last result in last 
    .... 
}); 
Cuestiones relacionadas