首页 > 解决方案 > 尝试使用 MongoDB 搜索匹配条件的记录时出错

问题描述

我正在参加关于 Udemy 的培训课程,它已经编写了后端代码,因为该课程纯粹是关于前端开发的。它使用我创建的一个非常简单的 MongoDB 数据库。我确定我的计算机上安装了 MongoDB 版本 4.0.10,以防万一。尝试对匹配记录执行查询时,出现以下错误:

UnhandledPromiseRejectionWarning:MongoError:FieldPath 字段名称可能不以“$”开头。在 MessageStream.messageHandler (I:\DEV\Training\React For the Rest of Us\backend-api\node_modules\mongodb\lib\cmap\connection.js:268:20) 在 MessageStream.emit (events.js:315: 20) 在 ProcessIncomingData (I:\DEV\Training\React For the Rest of Us\backend-api\node_modules\mongodb\lib\cmap\message_stream.js:144:12) 在 MessageStream._write (I:\DEV\Training \React For the Rest of Us\backend-api\node_modules\mongodb\lib\cmap\message_stream.js:42:5) at writeOrBuffer (internal/streams/writable.js:358:12) at MessageStream.Writable.write (内部/流/writable.js:303:10)
在 TLSSocket.ondata (internal/streams/readable.js:719:22) 在 TLSSocket.emit (events.js:315:20) 在 addChunk (internal/streams/readable.js:309:12) 在 readableAddChunk (internal/流/可读.js:284:9)(节点:51960)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志--unhandled-rejections=strict(请参阅https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。(rejection id: 2) 在查看后端代码后,我发现了以下用于执行查询/搜索的代码,我确实注意到各个地方都有 $ 符号。

Post.search = function(searchTerm) {
  return new Promise(async (resolve, reject) => {
    if (typeof(searchTerm) == "string") {
      let posts = await Post.reusablePostQuery([
        {$match: {$text: {$search: searchTerm}}},
        {$sort: {score: {$meta: "textScore"}}}
      ])
      resolve(posts)
    } else { 
      reject()
    }
  })
}

到底出了什么问题,我该如何解决?

标签: javascriptmongodb

解决方案


这里同样的错误。在主应用程序中使用 axios 从 react 中搜索 - 非常简单(应该是)。这表明在我的情况下,当尝试从 react 搜索“打开搜索模式”时,mongodb 服务器崩溃并出现上述错误:
f:\PrgsReact\SimplePost\backend-api\node_modules\mongodb\lib\cmap\connection.js: 268 callback(new MongoError(document));
MongoError: FieldPath field names may not start with '$'.
etc..
我试图更改 mongodb 和 axios 的 npm ver 等。谢谢。


推荐阅读