要搜索文档,然后在mongoDB中搜索这些文档中的数组元素?

时间:2018-03-15 17:44:32

标签: node.js mongodb express mongoose

我一直在尝试为我的网站制作一个upvote和downvote功能。这是我的架构

{
"_id" : ObjectId("5aa639cb4add7a1c58507ac1"),
"vote" : -7,
"votedBy" : [],
"Fbid" : "109590486545309",
"imageId" : "86i1dr8apv",
"email" : "emnnevbjyo_1520686942@tfbnw.net",
"event" : "selfie",
"__v" : 0}

现在,我正在尝试的是使用 imageId 查找我的文档,然后查看 votedBy 数组以查找特定选民。如果具有某些值的查询结果根据upvoting或downvoting的逻辑行事。这是我的upvote和downvote代码

app.get('/:id/love', (req, res) => {
console.log("Hitting");
var image_Id = req.params.id;
var fb_id = req.user.id;
var query = {
    "imageId": image_Id
}
var upvote = {
    $inc: {
        vote: 1
    },
    $push: {
        votedBy: req.user.id
    }
}

var downvote = {
    $pull: {
        votedBy: req.user.id
    },
    $inc: {
        vote: -1
    }
}
likeImformation.find({
    "imageId": image_Id
}, {
    "votedBy": fb_id
}).count(function(err, count_num){
    if(count_num===0){
        likeImformation.findOneAndUpdate(query, upvote, function (err, voted) {
            if (err) {
                res.status(404)
            } else {
                console.log("upvoted");
                res.send("upvoted");
            }
        });
    }
    else if(count_num>0){
        console.log(count_num);
        likeImformation.findOneAndUpdate(query, downvote, function (err, voted) {
            if (err) {
                res.status(404)
            } else {
                console.log("downupvoted");
                res.send("downvoted");
            }
        });
    }
})

问题是我无法编写查询,搜索文档然后在文档中搜索数组元素并将其与“votedBy”匹配。

1 个答案:

答案 0 :(得分:0)

我们可以使用MongoDB中的and编写查询

{$and:[{ "imageId": image_Id }, { "votedBy": fb_id }]}

它将按预期工作