首页 > 解决方案 > 将字符串的值设置为数组的第一个元素

问题描述

对于给定的文档,我试图将一个字段(字符串)设置为字符串数组的第一个元素。考虑一个myPlaces包含以下文档的集合:

{
    "name" : "Place Q",
    "images" : [
        "foo-1",
        "foo-2",
        "foo-3"
    ]
}

我正在寻找创建以下内容:

{
    "name" : "Place Q",
    "images" : [
        "foo-1",
        "foo-2",
        "foo-3"
    ],
    "image" : "foo-1"
}

所以在 mongo shell 中,我执行:

db.myPlaces.update(
   {
      name: "Place Q"
   },
   {
      $set:
         {
            image: images.0
         }
   }
)

这会引发SyntaxError: missing } after property list我不明白的错误。如果我将数组括在引号"images.0"中,则值image设置为"images.0",而不是"foo-1"

我一直在查看 Mongodb 文档,看到了很多不同的示例,但并没有让我清楚什么可能是访问数组值的简单语法。

标签: mongodbmongooseaggregation-framework

解决方案


以下查询适用于 MongoDB 4.2,它可能不适用于以前的版本。

db.myPlaces.update(
  {
    name: "Place Q"
  },
  [
    {
      $set: {
        image: {
          $arrayElemAt: ["$images",0]
        }
      }
    }
  ]
)

它也非常有效,因为它使用了 MongoDB 4.2+ 版本中提供的 $set 管道。


推荐阅读