Mongoose: consultar contra ObjectIds con los operadores $ lt y $ gt

Creado en 3 sept. 2014  ·  3Comentarios  ·  Fuente: Automattic/mongoose

Suponiendo un esquema con una propiedad _id normal, quiero consultar con un operador $gt . Consulta de MongoDB equivalente:

db.applications.find({ _id : { $gt : ObjectId("53ddb3c00000000000000000") } })

Pero, en el lado de la mangosta, cuando se usa un objeto con el tipo ObjectId, arroja:

var minimumObjectId = new mongoose.Schema.ObjectId(minimumObjectIdString);
Applcation.find({ _id : { $gt : minimumObjectId } }) 
/*
{ [CastError: Cast to ObjectId failed for value "ObjectId('53de7ea3000000000000000')" at path "_id"]
  message: 'Cast to ObjectId failed for value "ObjectId(\'53de7ea3000000000000000\')" at path "_id"',
  name: 'CastError',
  type: 'ObjectId',
  value: 'ObjectId(\'53de7ea3000000000000000\')',
  path: '_id' }
*/

Como lo hace una cadena simple:

Application.find({ _id : { $gt : minimumObjectIdString } })

Incluso he probado algo loco como:

Application.find({ _id : { $gt : "ObjectId('" + minimumObjectIdString + "')" } })

Comentario más útil

esto no funciona para mi

Todos 3 comentarios

@ vkarpov15 , creo que esto también puede ser un problema en el controlador nativo de mongo subyacente, ya que intenté hacer algo como:

Application.collection.find({ _id : { $gt : "53f0c1850000000000000000" } }, function(err, cursor) {
    console.log(err)
    cursor.toArray(function(results){
        console.log(results);
    })
})

¿Qué estás haciendo para obtener minimumObjectIdString ? Debe usar mongoose.Types.ObjectId lugar de mongoose.Schema.ObjectId

var minimumObjectId = new mongoose.Types.ObjectId(minimumObjectIdString);
Applcation.find({ _id : { $gt : minimumObjectId } }) 

También debería funcionar con una cuerda.

esto no funciona para mi

¿Fue útil esta página
0 / 5 - 0 calificaciones