从 Mongoose/MongoDB 中的数组中删除对象
Posted
技术标签:
【中文标题】从 Mongoose/MongoDB 中的数组中删除对象【英文标题】:Removing an Object from an Array in Mongoose/MongoDB 【发布时间】:2016-03-16 21:58:03 【问题描述】:我是一名 mongoDB 新手,在使用 Mongoose 从 MongoDB 中的数组中删除团队对象时遇到了麻烦。我的用户集合看起来像;
"orders":[],
"teams":[
"teamname":"Team One",
"_id":"$oid":"566a038404ebcdc344c5136c",
"members":[
"firstname":"Member ",
"lastname":"Three",`enter code here`
"email":"memberthree@team.com",
"initials":"MT",
"_id":"$oid":"566a038404ebcdc344c5136d"
,
]
,
"teamname":"Team Two",
"_id":"$oid":"566a07f404ebcdc344c51370",
"members":[
"firstname":"Member",
"lastname":"Two",
"email":"membertwo@team.com",
"initials":"MT",
"_id":"$oid":"566a07f404ebcdc344c51371"
,
]
,
"teamname":"Team Three",
"_id":"$oid":"566a083504ebcdc344c51373",
"members":[
"firstname":"Member",
"lastname":"Four",
"email":"memberfour@team.com",
"initials":"MF",
"_id":"$oid":"566a083504ebcdc344c51374"
,
]
],
我的移除路线看起来像;
exports.getTeamDelete = function(req, res)
User.findById(req.user.id, function(err, user)
if (err) return next(err);
var selectedTeamIndex;
for (i = 0; i < user.teams.length; i++)
if (user.teams[i]._id==req.params.teamid)
selectedTeamIndex=i;
break
console.log("before", user.teams)
console.log(req.params.teamid)
teamID=req.params.teamid;
userID=req.user.id;
User.update(
'_id': userID,
$pull: "teams" : teamID ,
multi: true ,
function(err, data)
console.log(err, data);
);
user.markModified("teams");
user.save(function(err)
console.log("after", user.teams)
if (err) return next(err);
req.flash('success', msg: 'Team deleted' );
);
);
;
User.update 之前和之后的控制台日志完全相同,我没有抛出任何错误。 console.log(err,data) 的输出最终是
null ok: 1, nModified: 0, n: 1
我不确定如何解释。我也尝试过不按照此处的建议传递用户 ID;https://***.com/a/24289161/574869 无济于事(结果相同)。此外,我尝试将用户更新为;
User.update(
'_id': userID,
$pull: "teams" : id: teamID ,
false,
true
);
正如这里提到的https://***.com/a/15641895/574869 导致错误;
/Users/markbreneman/Desktop/GatherRoundApp/node_modules/mongoose/lib/query.js:2022
oldCb(error, result ? result.result : ok: 0, n: 0, nModified: 0 );
^
TypeError: oldCb is not a function
我也不确定如何解释。如果有人对我做错了什么有任何见解,或者如何轻松地从我的团队数组中删除一个团队,我会非常感激。
【问题讨论】:
【参考方案1】:User.update(
"_id" : userID ,
"$pull" : "teams" : "_id" : teamID ,
"multi" : true
)
【讨论】:
以上是关于从 Mongoose/MongoDB 中的数组中删除对象的主要内容,如果未能解决你的问题,请参考以下文章
如何对 mongoose/mongodb 和 nodejs 中的对象数组进行排序?
Mongoose MongoDB 找到数组字段中数组长度最小的那个
在 Mongoose/MongoDB 的文档中过滤数组、子文档、数组、文档