mongodb - MongoDB 数组中的 $project
问题描述
我有items
以下文档的 MongoDB 集合:
{
data: [{"name": "First"}, {"name": "Second"}],
data2: [{"value": 20}, {"value": 30}]
}
有什么办法可以投射data2.value
到data.value
相同的索引上?我需要这个结果:
{
data: [
{"name": "First", value: 20},
{"name": "Second", value: 30}
]
}
它想要这样的东西:
db.items.aggregate([{"$project": {"data.X.value": "$data2.X.value", "data2": 0}}]) // Where X "iterate" over all indexes (so 0 and 1).
数组的长度data
和data2
总是相同的,但不一定是 2。
解决方案
你可以试试,
- $map按
data
数组对象循环遍历对象 - $indexOfArray获取当前对象的索引
$$d
- $arrayElemAt从特定对象索引
value
中获取元素data2
$$d
db.collection.aggregate([
{
$project: {
data: {
$map: {
input: "$data",
as: "d",
in: {
name: "$$d.name",
value: {
$arrayElemAt: [
"$data2.value",
{ $indexOfArray: ["$data", "$$d"] }
]
}
}
}
}
}
}
])
推荐阅读
- java - 如何为应用用户注册/订阅 OneSignal 中的主题?
- python - 检查具有不同值系统的两个数据框列的相似性
- php - PhpStorm PestPHP 不应该发生
- c# - 如何保存神经元训练数据?
- python - 给定一个大小为 n 的数组 arr 和一个整数 X。查找数组中是否有一个三元组的总和为给定整数 X
- reactjs - 在使用提供者包裹的屏幕中未收到道具
- .net-core - 如何在 dot net core 项目中使用 IConfiguration 访问自定义 JSON 文件?
- javascript - 如何在 express js 中解析多部分/混合请求正文?
- delphi - TFileStream 将数据写入下一行
- numpy - Pytorch / Numpy 维度数学:为什么 [n] + [n, 1] = [n, n]