我对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"}}})
但它从未向我展示比赛文件。
有人可以帮助并告诉我,我做错了什么吗? 谢谢!
答案 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"]}}}})
...将返回两份文件。
第二个例子(我认为)符合这个要求:
我试图获取集合中的所有文档,其中至少有一个我为查询传递的倍数选项。