Dan*_*scu 6 mongodb aggregation-framework
我有一个包含对象数组的文档集合:
db.collection.insert({
arr: [
{ id: 1, text: 'foo' },
{ id: 2, text: 'bar' },
]
});
Run Code Online (Sandbox Code Playgroud)
有没有办法在该数组中提取/投影/添加一个元素的字段?例如,text数组第一个元素的字段。我已经试过各种变化$ addFields在MongoPlayground,
db.collection.aggregate([
{
$addFields: { text1: '$arr.text' }
}
]);
Run Code Online (Sandbox Code Playgroud)
但没有任何东西只产生一个text领域。充其量,我得到了两个,使用上面的语法,但我只想要一个字段,以便在其上使用 $type,因为它似乎$type无法检查数组元素。
您可以使用$let和$arrayElemAt来定义临时变量,然后引用它来获取text字段:
db.collection.aggregate([
{
$addFields: {
text1: {
$let: {
vars: {
first: {
$arrayElemAt: [ "$arr", 0 ]
}
},
in: "$$first.text"
}
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
提取数组元素的字段的一种方法是$arrayElemAt在$project阶段中使用投影第一个元素,然后访问所需的字段,例如text,在第二$project阶段:
db.collection.aggregate([
{
$project: {
elem1: {
$arrayElemAt: ["$arr", 0]
}
}
},
{
$project: {
text1: "$elem1.text"
}
}
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2381 次 |
| 最近记录: |