首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDB查询:使用"findOne“进行聚合

MongoDB查询:使用"findOne“进行聚合
EN

Stack Overflow用户
提问于 2022-01-11 16:14:24
回答 1查看 95关注 0票数 1

我试图对MongoDB 3.4进行查询,在其中为数组的一个特定元素添加一个字段。对象的示例:

代码语言:javascript
复制
    {
        "_id": 1,
        "people": [
            {
                "name": "Jhon Smith",
                "age": "30",
                "state": "NY"
            },{
                "name": "Clint Mercer",
                "age": "50",
                "state": "NY"
            },{
                "name": "Walter Smith",
                "age": "40",
                "state": "WI"
            }
        ]
    }

我想要做一个查询,在这个文档中添加一个属性,其中第一个人的名字中有"Smith“。示例:

代码语言:javascript
复制
    {
        "_id": 1,
        "people": [
            {
                "name": "Jhon Smith",
                "age": "30",
                "state": "NY"
            },{
                "name": "Clint Mercer",
                "age": "50",
                "state": "NY"
            },{
                "name": "Walter Smith",
                "age": "40",
                "state": "WI"
            }
        ],
        "firstSmith": {
            "name": "Jhon Smith",
            "age": "30",
            "state": "NY"
        }
    }

我已经有了我想要的文档的_id,但是我不知道如何进行这样的查询。我试图在id和"$addFields“之后使用聚合和”$addFields“,但是我无法对这个字段进行查询,以找到我想要的内容。我认为这类似于"findOne“查询,但是我找不到任何在"$addFields”上工作的东西。

我不想让"firstSmith“成为一个数组,里面只有一个”人“,我想要它,就像在这个例子中一样。

我很感谢你能帮我这个忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-11 16:19:33

  • $match -过滤相关文档
  • $filter with $regexMatch -通过name属性筛选people数组
  • arrayElemAt -只获取上面数组的第一个元素
  • $addFields -从上述结果中添加具有值的新字段
代码语言:javascript
复制
db.collection.aggregate([
  {
    "$match": {
      "_id": 1
    }
  },
  {
    "$addFields": {
      "firstSmith": {
        "$arrayElemAt": [
          {
            "$filter": {
              "input": "$people",
              "cond": {
                "$regexMatch": {
                  "input": "$$this.name",
                  "regex": "Smith"
                }
              }
            }
          },
          0
        ]
      }
    }
  }
])

工作实例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70669968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档