我有这样的Feed集。
{
"_id" : ObjectId("5989986f93d2f911f44d58f0"),
"createdAt" : ISODate("2017-08-08T10:54:39.984Z"),
"updatedAt" : ISODate("2017-08-16T10:36:01.254Z"),
"subCategory" : "35",
"category" : "49",
"title" : "Toilet Ek Prem Katha Official Trailer | Akshay Kumar | Bhumi Pednekar | 11 Aug 2017",
"feedType" : "USER_VIDEO_OWN",
"userId" : "5989954993d2f911f44d58ef",
"rating" : [],
"share" : [],
"likes" : [
"597835b7efb7eb000436f5a1",
"5989951d6b97e904a0331091",
"5989954993d2f911f44d58ef",
"598994f26b97e904a0331090"
],
"isDeleated" : 0,
"isActive" : 1,
"lastComment" : null,
"rateCount" : 0,
"recommended" : 0,
"playCount" : 0,
"commentCount" : 11,
"likeCount" : 4,
"url" : "",
"text" : "Movie !!!!!!!!!!!!!!!",
"video" : "https://www.youtube.com/watch?v=ym4EJQ7XORk",
"image" : "",
"__v" : 0}
它们是一个类似的数组,其中包含那些喜欢此Feed的用户userIds。 如果我的userId存在于此数组中,则我希望在获取feed时得到一个like标志,标志为true或其他标志为false或0。
目前我正在使用额外的for循环来实现这一目标,但我认为这不是一个好方法。
for (var i = 0; i < data.length; i++) {
data[i].isLiked = 0;
for (var j = 0; j < data[i].likes.length; j++) {
var likedUserId = data[i].likes[j];
if (likedUserId == b.userId) {
data[i].isLiked = 1;
data[i].followStatus = 1;
data[i].likes = '';
}
}
}
答案 0 :(得分:1)
你必须做两步逻辑
1.使用Query
从DB中获取数据2.检查用户是否喜欢该Feed。
代码概述:
var _ = require('underscore');
Db.find({}, function(err,res){
for (var i = 0; i < res.length; i++) {
if(_.conatins(data[i].likes), b.userId) {
res[i].isLiked = 1;
} else {
res[i].isLiked = 0;
}
}
})
答案 1 :(得分:0)
试试此代码
var data = require('./models/feed.js');//This is the schema I assumed it as data
app.get('/likes/:userId',function(req,res){
data.find({'likes':req.params.userId},function(err,result){
if(result == true){
res.json(result);
}
else if(result == false){
res.json("id does not exists");
}
else(err) res.json('false');
});
});
在我的代码中,如果您通过参数传递userId,您将获得所需的响应。希望这对您有所帮助。