Node.js 错误';无法将$pull应用于非数组值';
Node.js 错误';无法将$pull应用于非数组值';,node.js,mongodb,mongodb-query,Node.js,Mongodb,Mongodb Query,db.collection(USERDETAILS\u collection).findOneAndUpdate({ “emailVerificationHistory.verifyCode”:邮件代码 }, { “$pull”:{ “emailVerificationHistory.$.verifyCode”:邮件代码 } }, 函数(err、pullData){ 如果(错误){ 控制台日志(err); }否则{ res.send({ 消息:“用户已成功验证”, 现状:1 }); } });您
db.collection(USERDETAILS\u collection).findOneAndUpdate({
“emailVerificationHistory.verifyCode”:邮件代码
}, {
“$pull”:{
“emailVerificationHistory.$.verifyCode”:邮件代码
}
},
函数(err、pullData){
如果(错误){
控制台日志(err);
}否则{
res.send({
消息:“用户已成功验证”,
现状:1
});
}
});代码>您对的使用不正确:
db.collection(USERDETAILS_COLLECTION).findOneAndUpdate(
{ "emailVerificationHistory.verifyCode":mailCode },
{'$pull':{ "emailVerificationHistory": { "verifyCode": mailCode } },
function(err,pullData) {
if(err) {
console.log(err);
} else {
res.send({msg: 'User Verified Succesfully', status: 1});
}
}
);
update操作符本身就像一个查询。因此它接受一个条件并从数组中“提取”匹配元素
因此,虽然使用选择查询来匹配数组中的元素是一种很好的做法,但您不会对元素使用位置运算符$
,而是提供数组本身。感谢您的提示。将$pull
更改为$unset
帮助我得到了想要的。@HishamMubarak实际上$unset
只会将数组元素“替换”为null
。如果您需要删除它,那么实际上可以使用$pull
。如果要删除“多个匹配项中的一个”,则可以将$unset
和$pull
作为两个操作。但是,您的值应该是“唯一的”,因此您应该使用$pull
。