在我的架构中,我有两个带用户的数组,inviteUsers和joinedUsers。邀请数组是从请求正文
创建的invitedUsers: req.body.invitedUsers
当用户点击“加入”
时,会更新已加入的数组$addToSet: {joinedUsers: req.user}
然后我可以通过执行
从joinUsers数组中提取用户{$pull: {joinedUsers: {_id: req.user._id}}}
但是,我无法从受邀用户数组中提取,尽管用户对象是相同的。这是完整的代码:
app.put('/decline/events/:id', function (req, res) {
var update = {$pull: {invitedUsers: {_id: req.user._id}}};
console.log(req.user._id);
Event.findByIdAndUpdate(req.params.id, update, function (err, event) {
if (err) {
res.send(err);
};
Event.find({})
.populate('owner')
.exec(function (err, events) {
if (err) {
res.send(err);
};
res.json(events)
});
});
});
客户端上的Ajax调用
$scope.declineInvitation = function (id) {
$http.put('/decline/events/' + id)
.success(function (data) {
})
.error(function (data) {
console.log('Error: ' + data);
});
};
一切都没有错误,但inviteArray没有改变,就像mongoose找不到它一样。什么可能解决这个问题?
更新
事件架构定义,根据要求:
var eventSchema = new Schema({
title: {type: String},
description: {type: String, default: ''},
startDate: Date,
invitedUsers: {type: Array, default: []},
joinedUsers: {type: Array, default: []},
owner: {type: Schema.Types.ObjectId, ref: 'User'},
created_at: {type: Date, default: Date.now()},
updated_at: {type: Date, default: null},
location: String
}
答案 0 :(得分:0)
问题是因为_id
中的invitedUsers
是字符串而req.user._id
是ObjectId。
在toString()
上拨打_id
即可解决问题:
var update = {$pull: {invitedUsers: {_id: req.user._id.toString()}}};