首页 > 解决方案 > Mongoose countDocuments 未按预期返回

问题描述

我正在尝试编写一个函数来在提交查询之前查找猫鼬数据库中的文档是否存在。但是,它一直说该文档不存在,即使它确实存在。


/**
 * Determines if a Journal already exists (via ISSN numer)
 * @param {string} data - The ISSN number of the Journal to be checked
 * @return {boolean} - True = journal exists, false it doesnt exist.
 */
async function getJournalByISSN(data) {
  const issn = String(data);
  const docCount = await Journal.countDocuments().or([
    {issn_electronic: issn},
    {issn_print: issn}]);
  let value = false;
  console.log(docCount, value);
  if (docCount != 0) value = true;
  return value;
}

给定数据的 console.log 返回格式正确的 ISSN。当我调试猫鼬查询时,它看起来格式正确。

控制台日志

journals.countDocuments {"$or":[{"issn_electronic":"1234-​1234"},{"issn_print":"1234-1234"}]} {}

手动指定搜索字段时,即

{issn_electronic: '1234-1234'}, {issn_print: '1234-1234'}]}

它返回正确的文档计数值。

有趣的是复制粘贴mongoose的debug,发现字符串中已经注入了空格

例如

journals.countDocuments {"$or":[{"issn_electronic":"1234- 1234"},{"issn_print":"1234- ​1234"}]} {}

标签: node.jsmongodbmongoose

解决方案


这是隐藏字符的问题

字符串有隐藏字符,无法验证,

通过它替换数据字符串解决了这个问题

data = data.replace(/[\u200c\u200b]/g, '')

推荐阅读