mongoDB:查询可能具有某些特定选项的文档

时间:2017-11-07 22:02:06

标签: mongodb mongodb-query

我对mongodb很新,有一件事我现在无法解决: 让我们假装,您有以下文档结构:

{
"_id": ObjectId("some object id"),
name: "valueName",
options: [
    {idOption: "optionId", name: "optionName"},
    {idOption: "optionId", name: "optionName"}
]
}

每个文档都可以包含已分类的多个选项。

我试图获取集合中的所有文档,其中至少有一个我为查询传递的倍数选项。

我正在尝试使用这样的运算符$elemMatch

db.collectioName.find({"options.name": { $elemMatch: {"optName1","optName2"}}})

但它从未向我展示比赛文件。

有人可以帮助并告诉我,我做错了什么吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

鉴于一个包含以下文件的集合:

{
    "_id" : ObjectId("5a023b8d027b5bd06add627a"),
    "name" : "valueName",
    "options" : [ 
        {
            "idOption" : "optionId",
            "name" : "optName1"
        }, 
        {
            "idOption" : "optionId",
            "name" : "optName2"
        }
    ]
}

{
    "_id" : ObjectId("5a023b9e027b5bd06add627d"),
    "name" : "valueName",
    "options" : [ 
        {
            "idOption" : "optionId",
            "name" : "optName3"
        }, 
        {
            "idOption" : "optionId",
            "name" : "optName4"
        }
    ]
}

此查询...

db.collection.find({"options": { $elemMatch: {"name": {"$in": ["optName1"]}}}})

..仅返回第一份文件。

虽然,这个查询......

db.collection.find({"options": { $elemMatch: {"name": {"$in": ["optName1", "optName3"]}}}})

...将返回两份文件。

第二个例子(我认为)符合这个要求:

  

我试图获取集合中的所有文档,其中至少有一个我为查询传递的倍数选项。