我正在尝试进行一个非常简单的操作,使用Mongoose在Mongo数据库中从数组中提取一个项目,像这样:
User.update({ _id: fromUserId }, { $pull: { linkedUsers: [idToDelete] } });
fromUserId
和idToDelete
都是对象ID。
用户模式如下:
var UserSchema = new Schema({
groups: [],
linkedUsers: [],
name: { type: String, required: true, index: { unique: true } }
});
linkedUsers
是一个只接收其他用户 Id 的数组。
我也尝试过这个方法:
User.findOne({ _id: fromUserId }, function(err, user) {
user.linkedUsers.pull(idToDelete);
user.save();
});
但是没有运气。
当我在不同的位置控制数组的长度时,第二个选项似乎几乎能够工作,但是在调用 save
并检查之后,长度仍然为36:
User.findOne({ _id: fromUserId }, function(err, user) {
console.log(user.linkedUsers.length); // returns 36
user.linkedUsers.pull(idToDelete);
console.log(user.linkedUsers.length); // returns 35
user.save();
});
看起来我很接近了,但还是没有运气。这两个ID都是通过应用程序的前端发送的。
我正在运行以下版本:
"mongodb": "^2.2.29",
"mongoose": "^5.0.7",
先行致谢。
User.findOneAndUpdate(fromUserId, { "$pull": { "linkedUsers": idToDelete } }, { "new": true }, callback);
- chridamUser.findByIdAndUpdate(fromUserId, { "$pull": { "linkedUsers": idToDelete } }, { "new": true }, callback);
或者User.findOneAndUpdate({ _id: fromUserId }, { "$pull": { "linkedUsers": idToDelete } }, { "new": true }, callback);
? - chridamUser.findOneAndUpdate( { _id: fromUserId }, { $pullAll: { linkedUsers: [idToDelete] } }, { new: true }, function(err, data) {} );
你能把你的评论设为答案,这样我就可以接受它了吗?非常感谢! - kevin