node.js - 如何使用 findByIdAndUpdate 使用 Mongoose 更改子数组
问题描述
我正在创建一个 MEAN 堆栈来执行列表,并且需要以下 Mongoose 语法的帮助。
我正在尝试将 todos 数组的已完成字段更新为 true。通过研究,我能够使用 Mongoose 模型 findOneAndUpdate 更新我的子文档。
但是,我也在尝试学习如何使用 findByIdAndUpdate。我似乎无法让它工作。我哪里错了?
我的带有嵌套子文档待办事项的 Mongoose 文档:
{
//this is my userID
"_id": ObjectId("5b21cbdeebe2b414906b2b31"),
"username": "john",
"todos": [{
// this is my id
"_id": ObjectId("5b21cbdeebe2b414906b2b32"),
"item": "testing",
"completed": false
}, {
// this is my id
"_id": ObjectId("5b22dd570f15b72e949591f6"),
"item": "adding new",
"completed": false
}]
}
我的猫鼬功能:
module.exports.markItemCompleted = function(id, callback) {
Item.findByIdAndUpdate(id, { $set: { completed: true }}, callback);
}
解决方案
您需要使用$[] 位置运算符来更新数组中的每个元素
module.exports.markItemCompleted = function(id, callback) {
Item.update(
{ _id: id },
{ $set: { 'todos.$[].completed': true }}, callback
);
}
注意:你应该有mongodb 版本 3.6
推荐阅读
- spring-integration - Spring集成jdbc数组更新查询spel表达式
- wpf - WPF 为路径添加自定义工具提示
- java - 如何在 java 中解析 /getusereffectivepermissions 共享点响应?
- javascript - 如何将 setInterval 定位到特定的 html 标记
- facebook - Facebook App Review,步骤“合同已签署”将无法确认
- asp.net - 使用剃须刀页面和 ASP.NET Core 2.1 覆盖日期字段模板
- unhandled-exception - 如何修复格式字符串错误
- javascript - React 处理空道具
- java - org.hibernate.hql.internal.antlr.HqlBaseParser.identPrimary (java.lang.NullPointerException)
- python - 在 DataFrame 中拆分需要的行