2016-09-09 15 views
0

私はMongoDBとMongooseでExpressアプリケーションを持っています。アプリケーションは、すべてのDBに保持されている異なるプロジェクトの画像ギャラリーを表示します。私はDBで開催された前回と次のプロジェクトにリンクする各画像ギャラリーが欲しいので、私はそれらのプロジェクトのIDを取得し、EJSテンプレートにそれらを渡すためにしようとしている:Javascriptで次と前のMongoDBを取得

app.get('/projects/:_id', function(req, res){ 
nextProject = Project.findById({_id: {$gt: req.params._id}}).sort({_id: 1 }).limit(1) 
console.log('Next Project'); 
console.log(nextProject); 

しかし、このリターンエラー:

{ CastError: Cast to ObjectId failed for value "{ _id: { '$gt': '57d09754943f2403738edb04' } }" at path "_id" 

データベースの前と次のエントリを取得する方法はありますか?実際にはは実際にはであり、現在表示されているものと異なる限り、DB内の前のエントリと次のエントリは問題ありません。

場合、それは便利ですが、ここではプロジェクトのスキーマです:

var mongoose = require('mongoose'); 

var projectSchema = new mongoose.Schema({ 
    title: String, 
    description: String, 
    images: Array 
}); 

module.exports = mongoose.model('Project', projectSchema); 

ありがとうございました!

+0

ObjectId文字列を追加しようとすると、少なくともmongo shellが必要です。mongooseについてはわかりません。何か:nextProject = Project.findById({_ id:{$ gt:ObjectId(req.params._id)}} ).sort({_ id:1})。limit(1)。 –

答えて

1

findByIdからfindに変更するだけです。

findByIdは、クエリオブジェクトではなく、探しているドキュメントの_idを受け入れます。

+0

ありがとうJohnnyHK!それはエラーメッセージを取り除き、var nextProjectにはドキュメントでなければならないものが入っていますが、IDやタイトルはまだ得られません。もしconsole.log(nextProject.title)ならundefinedを返します。 –

+0

'find'は、クエリを非同期に実行し結果を取得するために' exec(callback) 'を呼び出す必要があるクエリオブジェクトを返します。あるいは、コールバック関数を 'find'の第2引数として渡すだけです。 – JohnnyHK

関連する問題