Mongodb 在对象数组中查找结果并匹配电子邮件地址字段

Mongodb 在对象数组中查找结果并匹配电子邮件地址字段,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在尝试匹配emailAddress字段和页面\u slug。目前,我使用的是与模块序列中的about页面匹配的以下内容: db.getCollection('users').find({"modularSequence.page_slug": "about"}, {"modularSequence.$": 1 }) 这起作用并返回: { "_id" : ObjectId("5740c631742da6e83389abb4"), "modularSequence" : [

我正在尝试匹配
emailAddress
字段和
页面\u slug
。目前,我使用的是与模块序列中的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都匹配时才返回结果?

您的
$和
数组也包含了字段选择参数。但是,由于默认情况下多个查询项是隐式and,因此您不需要在此处使用
$和
,因此您可以将查询简化为:

db.users.find({"emailAddress": 'paul@example.com', "modularSequence.page_slug": "about"},
              {"emailAddress": 1, "modularSequence.$": 1})
这是您的第一个查询,但在查询和字段选择参数中都添加了
emailAddress
字段


的第一个参数是查询(哪些文档),第二个参数是投影(这些文档中的哪些字段),因此这些字段有两次。投影中的
$
表示查询中匹配的
modularSequence
数组元素。

太好了,非常感谢。我只想问几个问题,这样我就能完全理解这件事,而不仅仅是C&P'。我猜“emailAddress”:1指定我们需要来自顶层的emailAddress,而“modularSequence.$”:1-也在做同样的事情,但用$表示page\u slug。有一件事我不太明白,为什么我们要两次指定emailAddress&modularSequence?的第一个参数是查询(哪些文档),第二个参数是投影(这些文档中的哪些字段),这就是为什么这些字段有两次。投影中的
$
表示查询中匹配的
modularSequence
数组元素。最后一个@johnyhk,如果我要允许对象中多次出现“about”,我将如何允许这种情况?@dennistrun这是一个更棘手的情况。看见