Mongodb 如何在集合的数组中查找属性是否存在?

Mongodb 如何在集合的数组中查找属性是否存在?,mongodb,Mongodb,在find()命令中,我们将使用哪个查询文档来返回video.movieDetails集合中赢得或被提名最佳影片的所有影片?你可能会认为,只有在电影获奖或获得提名的情况下,奖项才会出现在“奥斯卡”名单中 "awards" : { "oscars" : [ {"award": "bestAnimatedFeature", "result": "won"}, {"award": "bestMusic", "result": "won"}

在find()命令中,我们将使用哪个查询文档来返回video.movieDetails集合中赢得或被提名最佳影片的所有影片?你可能会认为,只有在电影获奖或获得提名的情况下,奖项才会出现在“奥斯卡”名单中

"awards" : {
        "oscars" : [
            {"award": "bestAnimatedFeature", "result": "won"},
            {"award": "bestMusic", "result": "won"},
            {"award": "bestPicture", "result": "nominated"},
            {"award": "bestSoundEditing", "result": "nominated"},
            {"award": "bestScreenplay", "result": "nominated"}
        ],
        "wins" : 56,
        "nominations" : 86,
        "text" : "Won 2 Oscars. Another 56 wins and 86 nominations."
    }

你是说这个问题吗

db.movie.find({"awards.oscars.award":"bestPicture"})
输入:

结果


你是说这个问题吗

db.movie.find({"awards.oscars.award":"bestPicture"})
输入:

结果


如果我们可以假设最佳图片位于位置2,那么我们可以执行以下操作

{
    "$or": [{
        "awards.oscars.2.result": "won"
    },
    {
        "awards.oscars.2.result": "nominated"
    }]
})
如果我们想确保胜利和提名确实存在,那么我们可能应该参选

{
    "$and": [{
        "$or": [{
            "awards.wins": {
                "$gt": 0
            }
        },
        {
            "awards.nominations": {
                "$gt": 0
            }
        }]
    },
    {
        "$or": [{
            "awards.oscars.2.result": "won"
        },
        {
            "awards.oscars.2.result": "nominated"
        }]
    }]
}
或者,我们也可以使用elemMatch

{
    "awards.oscars": {
        "$elemMatch": {
            "$or": [{
                "award": "bestPicture",
                "result": "won"
            },
            {
                "award": "bestPicture",
                "result": "nominated"
            }]
        }
    }
}

如果我们可以假设最佳图片位于位置2,那么我们可以执行以下操作

{
    "$or": [{
        "awards.oscars.2.result": "won"
    },
    {
        "awards.oscars.2.result": "nominated"
    }]
})
如果我们想确保胜利和提名确实存在,那么我们可能应该参选

{
    "$and": [{
        "$or": [{
            "awards.wins": {
                "$gt": 0
            }
        },
        {
            "awards.nominations": {
                "$gt": 0
            }
        }]
    },
    {
        "$or": [{
            "awards.oscars.2.result": "won"
        },
        {
            "awards.oscars.2.result": "nominated"
        }]
    }]
}
或者,我们也可以使用elemMatch

{
    "awards.oscars": {
        "$elemMatch": {
            "$or": [{
                "award": "bestPicture",
                "result": "won"
            },
            {
                "award": "bestPicture",
                "result": "nominated"
            }]
        }
    }
}

您能否编辑您的问题以包含so样本文档和该查询的预期输出?您能否编辑您的问题以包含so样本文档和该查询的预期输出?我不希望此数据出现在“_id”:ObjectId(“569a7fc60586bcb40f7d2533”)。我想要那个些最佳图片奖的唱片,结果可能会被赢得或提名。在Oscars中,数组可能有另一个属性,但“bestPicture”是必需的。您无法通过此查询获取该数据。它与
bestPicture
值显式匹配。感谢您的回答我不希望此数据出现在“_id”:ObjectId(“569a7fc60586bcb40f7d2533”)。我想要那个些最佳图片奖的唱片,结果可能会被赢得或提名。在Oscars中,数组可能有另一个属性,但“bestPicture”是必需的。您无法通过此查询获取该数据。它与
bestPicture
值显式匹配。感谢您的回答