Mongoose: $ ltおよび$ gt演算子を使用したObjectIdに対するクエリ

作成日 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.Schema.ObjectId代わりにmongoose.Types.ObjectIdを使用する必要があります

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

文字列でも機能するはずです。

これは私にはうまくいきません

このページは役に立ちましたか?
0 / 5 - 0 評価