Mongoose: 使用 $lt 和 $gt 运算符查询 ObjectIds

创建于 2014-09-03  ·  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-driver 中的问题,因为我尝试执行以下操作:

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 等级