Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 错误';无法将$pull应用于非数组值';_Node.js_Mongodb_Mongodb Query - Fatal编程技术网

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