Mongoose: interroger sur les ObjectIds avec les opérateurs $lt et $gt

Créé le 3 sept. 2014  ·  3Commentaires  ·  Source: Automattic/mongoose

En supposant un schéma avec une propriété _id normale, je souhaite interroger avec un opérateur $gt . Requête MongoDB équivalente :

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

Mais, du côté de la mangouste, lors de l'utilisation d'un objet avec le type ObjectId, cela renvoie :

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' }
*/

Comme une simple chaîne :

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

J'ai même essayé quelque chose de fou comme :

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

Commentaire le plus utile

cela ne fonctionne pas pour moi

Tous les 3 commentaires

@ vkarpov15 , je pense que cela peut également être un problème dans le pilote mongo-native sous-jacent, car j'ai essayé de faire quelque chose comme:

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

Que faites-vous pour obtenir minimumObjectIdString ? Vous devriez utiliser mongoose.Types.ObjectId au lieu de mongoose.Schema.ObjectId

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

Cela devrait également fonctionner avec une chaîne.

cela ne fonctionne pas pour moi

Cette page vous a été utile?
0 / 5 - 0 notes