mongodb - 将字符串的值设置为数组的第一个元素
问题描述
对于给定的文档,我试图将一个字段(字符串)设置为字符串数组的第一个元素。考虑一个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 文档,看到了很多不同的示例,但并没有让我清楚什么可能是访问数组值的简单语法。
解决方案
以下查询适用于 MongoDB 4.2,它可能不适用于以前的版本。
db.myPlaces.update(
{
name: "Place Q"
},
[
{
$set: {
image: {
$arrayElemAt: ["$images",0]
}
}
}
]
)
它也非常有效,因为它使用了 MongoDB 4.2+ 版本中提供的 $set 管道。
推荐阅读
- rust - 关联类型超特征的别名
- ie11-developer-tools - IE 11 缺少请求标头
- javascript - 使用 React Select 自定义验证消息
- java - Apache Beam:未指定 Runner,并且在类路径中未找到 DirectRunner
- python - 如何将 Python Tensorflow Session Run Call 转换为 Tensorflow 的 C++ API
- javascript - 如何为每个请求添加拦截器以防止缓存请求
- rx-java2 - 任意数量的 Observable::flatMap 调用链
- python - 使用 SQLite 在 SqlAlchemy ORM 中发生冲突
- android - 无形的无限循环
- java - ChannelId 会改变吗?