如何在单个数据库命中中检查userIds mongoDb节点Js数组中的状态?

时间:2017-08-16 12:49:42

标签: node.js mongodb

我有这样的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 = '';
                }
            }
        }

2 个答案:

答案 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,您将获得所需的响应。希望这对您有所帮助。