我正在尝试匹配emailAddress
字段和page_slug
。目前我正在使用以下内容,它只匹配modularSequence中的about页面:
db.getCollection('users').find({"modularSequence.page_slug": "about"}, {"modularSequence.$": 1 })
这有效并且返回:
{
"_id" : ObjectId("5740c631742da6e83389abb4"),
"modularSequence" : [
{
"page_id" : "1",
"sequence" : "m_1",
"category" : "headers",
"page_slug" : "about"
}
]
}
这是我想要的一半。我也希望返回emailAddress字段。我尝试过使用它,但它会返回所有内容和多个模块化元素:
db.getCollection('users').find({$and:[{"emailAddress": 'paul@example.com'}, {"modularSequence.page_slug": "about"}, {"modularSequence": {$elemMatch: {page_slug:'about'}}}]})
[
{
"emailAddress": "paul@example.com",
"modularSequence": [
{
"page_slug": "about",
"category": "headers",
"sequence": "m_1",
"page_id": "1"
},
{
"page_slug": "contact",
"category": "content",
"sequence": "m_4",
"page_id": "2"
}
]
}
]
如何匹配emailAddress字段和modularSequence.page_slug - 只有在电子邮件地址匹配且page_slug匹配时才返回结果?
答案 0 :(得分:2)
您的$and
数组也包含您的字段选择参数。但是,您无需在此处使用$and
,因为默认情况下会隐式对多个查询字词进行AND运算,因此您可以将查询简化为:
db.users.find({"emailAddress": 'paul@example.com', "modularSequence.page_slug": "about"},
{"emailAddress": 1, "modularSequence.$": 1})
这是您的第一个查询,但查询和字段选择参数都添加了emailAddress
字段。
find
的第一个参数是查询( docs),第二个参数是投影(这些文档中的字段),所以这是为什么那些领域有两次。投影中的$
表示查询中匹配的modularSequence
数组元素。