2016-12-23 1 views
2

ファイル/ビデオを1回だけ報告できるようにします。ユーザーIDを配列にプッシュすることによって、ユーザーが既にファイルを報告しているかどうかを確認します。 これまでのところ、現在のユーザー、次にVideoIDを1ずつ増分して、それをreportedBy配列にプッシュすることができました。しかし、私はかなり失われています、それは現在のユーザーが既にファイルを報告しているかどうかをチェックすることです。すべてのヒント/ヘルプは非常に高く評価されます! :-)NodeJS/MongoDB - ログインしたユーザーの値を持つ配列の値を一致させる

MY ROUTE

router.get('/report/:videoLink', function(req, res, next){ 
async.waterfall([ 
    function(callback){ 
    User.findOne({_id: req.user._id}, function(err, foundUser){ 
     if(err) return next(err) 
     callback(err, foundUser) 
    }) 
    }, 
    function(foundUser, callback){ 
    Video.findOne({videoLink: req.params.videoLink}, function(err, reportVideo){ 
     reportVideo.reports++; 
     reportVideo.reportedBy.push(foundUser); 

     if (reportVideo.reports > 4) { 
     reportVideo.remove(); 
     } 
     reportVideo.save(function(err){ 
      if(err) return next(); 
     }); 
     res.redirect('/'); 
    }); 

    } 
]); 
}); 

MY SCHEMA

var mongoose = require('mongoose'); 
    var Schema = mongoose.Schema; 
    var random = require('mongoose-simple-random'); 


    var fragSchema = new Schema({ 

     title: String, 
     videoLink: {type: String, unique: true, required: true}, 
     category: String, 
     upVotes: {type: Number, default: 0}, 
     downVotes: {type: Number, default: 0}, 
     voted: {type: Boolean, default: false}, 
     reports: {type: Number, default: 0}, 
     reportedBy: [{ type: Schema.Types.ObjectId, ref: 'User'}], 
     ownByUser: {type: Schema.Types.ObjectId, ref: 'User'}, 
     date: { type: Date, default: Date.now } 

    }); 
    fragSchema.plugin(random); 

    module.exports = mongoose.model('Frag', fragSchema); 

答えて

0

これは、それが前にそのユーザーによって報告された場合にのみ、ビデオを見つける必要があります:

Video.findOne({ 
    videoLink: req.params.videoLink, 
    reportedBy: foundUser._id, 
}, ... 

これは以前に報告されなかった場合にのみビデオ:

これを達成する方法はたくさんありますが、あなたはそのアイデアを得ることができます。

あなたはそれがすでにそのユーザーがあなたのVideo.findOneコールバックのこの内部のようなものを報告された場合は、とにかく、テストを、ビデオを検索したい場合は、次の

if (reportVideo.reportedBy.indexOf(foundUser._id) < 0) { 
    // not reported by that user yet 
} else { 
    // already reported by that user 
} 

あなたがlodashを使用している場合は、あなたが使用することができます:

if (_.includes(reportVideo.reportedBy, foundUser._id)) { 
    // already reported by that user 
} else { 
    // not reported by that user yet 
} 

することは多分あなたは比較の前に.toString()またはそのような何かを使用する必要があります、あなたは文字列としてのIDを持っていることを確認します。

+0

ありがとう!まさに私が探していたもの!私は3つすべてをテストし、彼らはすべて仕事をした! :) – DbTheChain

関連する問題