javascript - 在文档中查找、更新并返回一个数组对象(mongodb)
问题描述
我有一堆格式如下的文件:
{
_id: "5b38c85f213751038ff4d0bb",
classes: [
{
_id: "5b38c85f21375103ytg65ju7",
standard: "12",
numberOfStudents: 45
},
{
_id: "5b38c85f2137510370987hgd",
standard: "11",
numberOfStudents: 51
},
]
}
我想要:
_id
按和特定类的搜索文档集合_id
。- 更新
numberOfStudents
那个类。 - 仅返回类对象。
所以对于_id: "5b38c85f213751038ff4d0bb"
& classes._id: "5b38c85f21375103ytg65ju7"
,更新numberOfStudents: 43
我期望的结果是:
{
_id: "5b38c85f21375103ytg65ju7",
standard: "12",
numberOfStudents: 43
}
我已经尝试了几件事,但它们都返回了整个文档,但不是我想要的方式。
解决方案
您可以尝试以下聚合
db.collection.aggregate([
{ "$match": { "_id": "5b38c85f213751038ff4d0bb" }},
{ "$addFields": {
"classes": {
"$filter": {
"input": "$classes",
"as": "class",
"cond": {
"$eq": [
"$$class._id",
"5b38c85f21375103ytg65ju7"
]
}
}
}
}},
{ "$unwind": "$classes" },
{ "$replaceRoot": { "newRoot": "$classes" }},
{ "$project": {
"_id": 1,
"numberOfStudents": { "$literal": 43 },
"standard": 1
}}
])
输出
[
{
"_id": "5b38c85f21375103ytg65ju7",
"numberOfStudents": 43,
"standard": "12"
}
]
在这里试试
推荐阅读
- javascript - 为什么 javascript fetch() 返回 403 而 python-requests 返回 200?
- laravel - 我似乎无法在供应商包中访问我的身份验证
- javascript - 如何选择具有特定值的所有元素并使用 jquery 更新值
- c# - 如何围绕自身旋转对象?
- ios - Xcode - 无法在脚本中使用 PlistBuddy 修改 plist
- vue.js - 单击 v-data-tables 中的 v-btn 时未显示 v-dialog
- error-handling - iOS Swift5如何检查对象是否是在类型数组[Class.Type]中声明的类型?
- angular - 使用rxjs以角度延迟http响应
- xcode - ''预期的 ';' 在顶级声明符“和”未知类型名称“命名空间”之后
- javascript - 如何修复该代码上的“DiscordAPIError:Unknown Channel”?