mongodb - 在 MongoDB 聚合中添加数组元素的字段
问题描述
我有一组包含对象数组的文档:
db.collection.insert({
arr: [
{ id: 1, text: 'foo' },
{ id: 2, text: 'bar' },
]
});
有没有办法提取/投影/添加该数组中一个元素的字段?例如,text
数组的第一个元素的字段。我在 MongoPlayground 中尝试了$ addFields的各种变体,
db.collection.aggregate([
{
$addFields: { text1: '$arr.text' }
}
]);
但没有任何东西只产生一个text
领域。充其量,我得到了两者,使用上面的语法,但我只想要一个字段,以便在其上使用 $type,因为它似乎$type
can't inspect array elements。
解决方案
您可以使用$let和$arrayElemAt来定义临时变量,然后引用它来获取text
字段:
db.collection.aggregate([
{
$addFields: {
text1: {
$let: {
vars: {
first: {
$arrayElemAt: [ "$arr", 0 ]
}
},
in: "$$first.text"
}
}
}
}
])
推荐阅读
- python - 循环遍历多个数据帧并创建日期时间索引然后加入数据帧
- javascript - 如何使用 JS 随机化我的输入位置?
- sql - 如何计算带有滚动日期窗口的 SAS PROC SQL 的不同?
- wordpress - 更改特定 Woocommerce 产品类别存档页面的默认排序
- django - 在 CircleCI 上运行 Django - psycopg2.OperationalError:无法连接到服务器:连接被拒绝
- django - django 中用于 GenericRelation 的 DRF 可写序列化程序
- websphere-liberty - 在 server.xml 中使用 maven 过滤而不破坏 mvn liberty:dev
- c++ - 如何确保 boids 100% 的时间避开墙壁
- javascript - 希望在页面导航栏中突出显示滚动(从左到右)
- ocaml - 为什么流类型的这个 flatten 函数会给我这个错误?