Mongoose: запрос к ObjectIds с помощью операторов $ lt и $ gt

Созданный на 3 сент. 2014  ·  3Комментарии  ·  Источник: Automattic/mongoose

Предполагая схему с обычным свойством _id , я хочу запросить с помощью оператора $gt . Эквивалентный запрос MongoDB:

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

Но со стороны мангуста при использовании объекта с типом ObjectId он выдает:

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

Как и простая строка:

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

Я даже пробовал что-то безумное, например:

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

Самый полезный комментарий

это не работает для меня

Все 3 Комментарий

@ vkarpov15 , я думаю, это также может быть проблемой в основном mongo-native-драйвере, поскольку я пытался сделать что-то вроде:

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

Что вы делаете, чтобы получить minimumObjectIdString ? Вы должны использовать mongoose.Types.ObjectId вместо mongoose.Schema.ObjectId

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

Он также должен работать со строкой.

это не работает для меня

Была ли эта страница полезной?
0 / 5 - 0 рейтинги