无法从猫鼬数组中拉出
Cannot pull from mongoose array
在我的架构中,我有两个包含用户的数组,invitedUsers 和 joinedUsers。邀请数组是从请求正文创建的
invitedUsers: req.body.invitedUsers
当用户单击 'Join'
时更新加入的数组
$addToSet: {joinedUsers: req.user}
然后我可以通过执行
从 joinedUsers 数组中拉取用户
{$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);
});
};
一切都没有错误,但 invitedArray 没有改变,就好像 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
}
问题是因为 invitedUsers
中的 _id
是一个字符串,而 req.user._id
是一个 ObjectId。
在 _id
上调用 toString()
将解决问题:
var update = {$pull: {invitedUsers: {_id: req.user._id.toString()}}};
在我的架构中,我有两个包含用户的数组,invitedUsers 和 joinedUsers。邀请数组是从请求正文创建的
invitedUsers: req.body.invitedUsers
当用户单击 'Join'
时更新加入的数组$addToSet: {joinedUsers: req.user}
然后我可以通过执行
从 joinedUsers 数组中拉取用户{$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);
});
};
一切都没有错误,但 invitedArray 没有改变,就好像 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
}
问题是因为 invitedUsers
中的 _id
是一个字符串,而 req.user._id
是一个 ObjectId。
在 _id
上调用 toString()
将解决问题:
var update = {$pull: {invitedUsers: {_id: req.user._id.toString()}}};