node.js - 子数组中的 MongoDB 更新查询
问题描述
另一个对象数组中的对象数组的更新。
我正在处理的 mongodb 字段:
otherFields: values,
tasks: [
{
_id: mongodb.objectID(),
title: string,
items:[{
_id: mongodb.objectID(),
title: string,
completed: boolean //field need to be update.
}]
},
{}...
],
otherFields: value
我需要使用task_id和item_id查找文档并更新任务项目中的已完成字段。使用猫鼬findOneAndUpdate方法
const path = "tasks.$.items." + item_id + "completed";
collectionName.findOneAndUpdate(
{ _id: req.user._id, "tasks._id": taskID },
{ $set: { [path]: true }});
以上查询无效!!!
解决方案
无需使用多个查询条件,因为您想更新具有唯一 ID 的特定项目。因此,您可以使用类似的东西:
collectionName.findOneAndUpdate(
{ 'tasks.items._id': itemID },
...
);
请记住,这种结构远未优化,因为它基本上会查看整个数据库......
现在我想起来了,你也会有更新的问题,因为文档中有两个嵌套数组。在此处阅读更多内容:如何在 mongodb 中更新多个数组元素
推荐阅读
- c# - 实体框架无对应列
- pandas - 根据 python 数据框中的日期和状态列创建额外的日期、时间和时区列
- rest - 如何格式化 github api 的请求
- php - Phinx - 将参数传递给模板的自定义迁移模板
- linux - 如何在高性能的树莓派 4 上使用 yolov3
- java - 如何组合验证两个或多个字段?在方法
- tensorflow - `tf.data.experimental.AUTOTUNE` 的大小是在初始化时确定的还是随时间而变化?
- angular - Angular中的排序排列
- android - Android Studio:如何绘制实时路线并保存?
- ruby-on-rails - 我是否必须在学生表中添加 password_digest 列才能使 student.authenticate(password) 运行?即使我使用的是设计?