javascript - 使用 javascript 数组方法更新 mongoose 中的嵌套数组
问题描述
我在更新mixed type
猫鼬模式中的字段时遇到问题。这不是最好的架构设置,但我有理由以这种方式设置它。现在我想执行javascript array-like
诸如push
. 我想访问在嵌套数组中迭代的当前文档的索引,在tags
字段上。像这样:
猫鼬模式
let user = {
name : String,
email : String,
tags : []
}
该tags
字段是在创建用户时动态生成的,在将用户插入数据库后我最终得到了这样的结果
tags : [
[{obj1}, {obj2}, {obj3}, ...],
[...],
[...],
[...],
[...]
]
我想要实现的 - 将新文档以“javascript方式”推送到嵌套数组
user.tags[0].forEach(obj, index){
// Do some operations here with obj and index
// I don't know how to update a nested array with the mongo $push operator that is why I am falling back to the `js array push` method
let newObj = { foo: bar }
user.tags[0].push(newObj)
user.save()
}
用邮递员测试后,显示操作成功并返回一个插入的项目,但我观察到两个问题:
- 它对 db 不是持久的,但同时我对邮递员的回复看起来像这样:
{
name : bar,
email : foo,
tags : [
[{ foo : bar}], // from the last push operation I did
[],
[],
[]...
...
]
}
- 对任何数组索引(例如第 0 个索引)的后续
push
操作会替换当前对象而不是附加它:user.tags[0].push(obj)
===> 这会替换第一个对象(当然在邮递员响应中而不是 db,因为它似乎不是持久的)
任何帮助如何实现这一点将不胜感激
我只是在学习这些东西,非常欢迎任何更好的方法来解决同样的问题,谢谢。:)
解决方案
我终于从这里找到了解决方案: Freecodecamp 论坛
我错过了这user.markModified("nameOfFieldToUpdate")
条线。在user.save()
解决问题之前添加此行之后。
推荐阅读
- javascript - 如何从作品音频中获取振幅?
- c++ - 声明默认 ctor 是否明确禁止生成合成 ctor?
- html - 如果为列和行设置了模板,如何使 CSS 网格自动换行?
- sql - 如果订单时间大于 24:00:00 大于 1 否则为 0,如何编写 sql 查询?
- python - RecursionError:集成时超出最大递归深度,sympy 1.1.1
- mysql - 选择查询为同一查询返回不同的结果
- java - Olingo getEntitySetIteratorRequest() 方法返回的实体数量是否有限
- github - git status 工作目录没有提交,工作目录清理,添加,提交 NO GO
- python - xlwings 在 Windows 中运行时遇到问题,因为没有名为“win32api”的模块
- python - 从 PyCharm 启动的 Python 脚本的 os.environ['PATH'] 与我的 shell 不同