ID 没有从嵌套数组中删除
Id not getting removed from nested array
您好,我正在尝试从文档中删除嵌套数组对象 id
,但它没有被删除。虽然我收到消息 "Deleted"
我的回复结构是:-
{
"admins": {
"users": [
"5d0364048db4957100f33fea" //<===want to delete this relational id
],
"email": "1cf1eede89@himail.online",
"password": "a$vHyGxX9P.t0/ybKcmIzkc.ZCX18oHaVnvTgJIWA2gTNzJ3TCdXS4a",
"_id": "5d0339d5b4b28b6ddff06802",
"companyName": "GH",
"__v": 0
}
我想从数组中删除 users
_id
。
我试过了,但没有被删除。
router.delete('/userDelete/:uId', checkAuth , (req, res, next) =>{
if(req.userData.role2 === 'admin') {
Admin.findOneAndUpdate({ _id: req.params.userId },{ $pull: { 'admins.users': req.params.uId}})
.exec()
.then(result => {
res.status(200).send(["Deleted"]);
})
.catch(err =>{
if (err.code == 500)
res.status(500).send(["Didn't get deleted"]);
else
return next(err);
});
控制器是这样的:-
var admin = new Admin();
admin.companyName = req.body.companyName;
admin.admins = {
email : req.body.email,
password: req.body.password,
users : []
};
我被困在这里了,我必须在我的路线上做些什么改变?
编辑:- 数据库是这样的
尝试在此处硬编码您的 ID
Admin.findOneAndUpdate({ _id: req.params.userId },{ $pull: { 'admins.users': "5d0364048db4957100f33fea"}})
如果有效,则执行
req.params.uId.toString()
问题就在这里Admin.findOneAndUpdate({ _id: req.params.userId }
req.params.userId
是 undefined,因为它不存在于您的路径中。 req.params
对象仅包含一个 属性、uId
。
所以您的查询没有找到任何数据。
req.params.userId
如果你的方法路由有这样的形式 router.delete('/userDelete/:userId/:uId)
.
就会有价值
因此,您可以在删除请求的 url 中添加 userId 并通过 req.params
对象访问它。新的url应该是这样的
/userDelete/userId/uId
(例如)
userDelete/5d0339d5b4b28b6ddff06802/5d0364048db4957100f33fea
尝试在数组的架构本身中将“_id”标记为 false。例如,在您的架构中,将“_id”标记为 false,如下所示:
admin: {
type: Object,
users: [{
_id: false
}]
}
.
.
//rest of the schema
您好,我正在尝试从文档中删除嵌套数组对象 id
,但它没有被删除。虽然我收到消息 "Deleted"
我的回复结构是:-
{
"admins": {
"users": [
"5d0364048db4957100f33fea" //<===want to delete this relational id
],
"email": "1cf1eede89@himail.online",
"password": "a$vHyGxX9P.t0/ybKcmIzkc.ZCX18oHaVnvTgJIWA2gTNzJ3TCdXS4a",
"_id": "5d0339d5b4b28b6ddff06802",
"companyName": "GH",
"__v": 0
}
我想从数组中删除 users
_id
。
我试过了,但没有被删除。
router.delete('/userDelete/:uId', checkAuth , (req, res, next) =>{
if(req.userData.role2 === 'admin') {
Admin.findOneAndUpdate({ _id: req.params.userId },{ $pull: { 'admins.users': req.params.uId}})
.exec()
.then(result => {
res.status(200).send(["Deleted"]);
})
.catch(err =>{
if (err.code == 500)
res.status(500).send(["Didn't get deleted"]);
else
return next(err);
});
控制器是这样的:-
var admin = new Admin();
admin.companyName = req.body.companyName;
admin.admins = {
email : req.body.email,
password: req.body.password,
users : []
};
我被困在这里了,我必须在我的路线上做些什么改变?
编辑:- 数据库是这样的
尝试在此处硬编码您的 ID
Admin.findOneAndUpdate({ _id: req.params.userId },{ $pull: { 'admins.users': "5d0364048db4957100f33fea"}})
如果有效,则执行
req.params.uId.toString()
问题就在这里Admin.findOneAndUpdate({ _id: req.params.userId }
req.params.userId
是 undefined,因为它不存在于您的路径中。 req.params
对象仅包含一个 属性、uId
。
所以您的查询没有找到任何数据。
req.params.userId
如果你的方法路由有这样的形式 router.delete('/userDelete/:userId/:uId)
.
就会有价值
因此,您可以在删除请求的 url 中添加 userId 并通过 req.params
对象访问它。新的url应该是这样的
/userDelete/userId/uId
(例如)
userDelete/5d0339d5b4b28b6ddff06802/5d0364048db4957100f33fea
尝试在数组的架构本身中将“_id”标记为 false。例如,在您的架构中,将“_id”标记为 false,如下所示:
admin: {
type: Object,
users: [{
_id: false
}]
}
.
.
//rest of the schema