mongodb - 如何在给定 MongoDB 中的元素位置的情况下提取数组的切片?
问题描述
我正在尝试在给定某个元素的位置(示例中的 action4)的情况下在 MongoDB 中提取数组的一部分。样本数据为
[{name: 'John Doe', actions: ['action1', 'action2', 'action3', 'action4']},
{name: 'Margie Addams', actions: ['action1', 'action2', 'action4', 'action3']},
{name: 'Fer Doughnut', actions: ['action1', 'action4', 'action3', 'action2']},
{name: 'Anthony Peralta', actions: ['action1', 'action2', 'action3', 'action4']},
{name: 'Pete Parker', actions: ['action1', 'action2', 'action3', 'action4']},
{name: 'Josh Dean', actions: ['action4', 'action2', 'action3', 'action1']}]
我设法action4
通过聚合查询找到数组内部的位置,例如
{$indexOfArray: ["$actions", "action4"]}
但找不到从数组开头提取到其位置的方法。有什么建议吗?
解决方案
您可以像这样使用$slice和$indexOfArray聚合运算符:
db.collection.aggregate([
{
$addFields: {
actions: {
$slice: [
"$actions",
{
$indexOfArray: [
"$actions",
"action4"
]
}
]
}
}
}
])
推荐阅读
- html - a href 样式 如何更改链接
- nginx - 通过 NGINX Kubernetes Ingress 将 HTML 添加到后端响应正文
- python - Python检查dict是否是其他dict的一部分
- django - 在 Django Rest 框架中处理 Paypal 付款/结帐
- python - 当在我的循环中我有空单元格时,我应该如何避免错误“列表索引超出范围”
- python - Python 字典按字母顺序排列 - 我如何按时间顺序排列?
- rust - 如何在 rust tui 应用程序中切换屏幕(termion + tui-rs)
- lisp - 在 CLISP 中设置随机状态
- java - 如何在 Eclipse 中设置 Gradle 和 Mockito
- docker - Jenkins/Groovy:为什么 docker.image.withRun() 失败,而 docker.image.run() 没有?