sailsjs 使用 mongodb 而不使用 ORM

2023-12-20

我想将 mongodb 与 sails 一起使用,但没有任何 ORM。下面是我连接 mongodb 的服务。
服务:

//DbService.js

    const MongoClient = require('mongodb').MongoClient;

    module.exports = {
      db:function(req, res){
        var connect=MongoClient.connect("mongodb:***********").then(function (err, database) {
          if(err) console.log(err);
          else{
            database=database.db('*****');
            return connect;
          }  

        });  
      }
    }

连接后,我在控制器中调用了它,但出现 TypeError: Cannot read property 'then' of undefined。

控制器:

//HomeControlelr.js
    module.exports = {
            index:function(req, res){
                DbService.db().then(function(err,db) {
                    console.log(db);
                })
            }
    };

First npm i mongodb因为你需要用以下内容包装任何 IDnew ObjectID(idStr).

然后你可以这样做:

const collection = Pet.getDatastore().manager.collection(Pet.tableName);
const res = await collection.find({ name: { $regex: /blue/ } });
const dataWithObjectIds = await res.toArray();
const dataWithIds = JSON.parse(JSON.stringify(rawDataArr).replace(/"_id"/g, '"id"'));

我创建了一个辅助函数来为我们完成所有这些工作:

/**
 * Use by chaining as if you were acting on a collection. So can use .find .aggregate etc.
 * Returns json searializable data.
 *
 * @param {class} model A model
 * @param {number} cnt - Number of chains on this, so I know when it reached the end
 */
function nativeMongoQuery(model, cnt) {

  const collection = model.getDatastore().manager.collection(model.tableName);

  let callCnt = 0;

  let req;

  const proxy = new Proxy({}, {
    get: (_, method) => (...args) => {

      if (!req) req = collection[method](...args);
      else req = req[method](...args);

      callCnt++;

      if (callCnt === cnt) {
        return (async function() {
          const rawDataArr = await req.toArray();
          return JSON.parse(JSON.stringify(rawDataArr).replace(/"_id"/g, '"id"'));
        })();
      } else {
        return proxy;
      }
    }
  });

  return proxy;

}

module.exports = nativeMongoQuery;

我不喜欢 JSON 解析、字符串化和全局替换。但如果我不进行字符串化,那么 mongo _id 就是全部ObjectIds.

像这样使用它:

const { ObjectId } = require('mongodb');

function makeObjectId(id) {
   return new ObjectId(id);
}

const ownerIds = ['5349b4ddd2781d08c09890f4', '5349b4ddd2781d08c09890f5']
const ownerObjectIds = ownerIds.map(makeObjectId);
await nativeMongoQuery(Pet, 2).find({ owner: { $in: ownerObjectIds } }).sort({ dueAt: 1 });

这是另一个例子:

const mostRecentlyCreatedPets = await nativeMongoQuery(Pet, 1).aggregate([
  { $match: { owner: { $in: ownerObjectIds } } },
  { $sort: { createdAt: -1 } },
  { $limit: 1 }
]);

The cnt论证告诉你你已经把多少东西拴在了那里。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sailsjs 使用 mongodb 而不使用 ORM 的相关文章

  • Angular 5 - ag-grid 18.0.1 - 边缘崩溃

    我一直在到处搜索 但无法找到与此相关的任何信息 很可能是因为 ag grid update 18 x 是新的 无论如何 似乎在将 ag grid 从 17 1 1 更新到 18 0 1 后 任何带有 ag grid 的页面最终都会导致 ED
  • mongodb从不同数据库中选择

    我有大约 200 个 mongodb 数据库 每个数据库都有一个名为 Group 的集合 在该集合中有一个名为 meldingId 的字段 是否可以进行一个 mongodb 查询来查找不同数据库中的所有值 我设法通过 selectDB da
  • 我应该在 Promise.all 中使用 wait 吗?

    我正在构建快速中间件 以对数据库进行两次异步调用 以检查用户名或电子邮件是否已在使用中 这些函数返回的承诺没有捕获 因为我想将数据库逻辑与 req res next 逻辑分开 并且我有集中的错误处理 需要next作为一个论点 在我对本地环境
  • 如何在 Google App Engine 上部署 1 个实例

    我需要在 Google App Engine 上部署一个简单 Node js 应用程序的 1 个实例 无需任何形式的扩展 我试过做gcloud preview app deploy 但是即使在我尝试关闭它们之后 也会创建许多实例 我的目标是
  • 如何在 TypeScript 中获取源代码中的实际行号(用于自定义日志记录)

    参考文献这个问题 https stackoverflow com questions 1340872 how to get javascript caller function line number how to get javascri
  • 使用 npm 作为构建工具连接文件

    我最近发现我可以使用 npm 作为任务运行程序 而不是 gulp 或 grunt 到目前为止 一切都很棒 lint stylus jade uglify watch 等 但串联部分 我似乎无法实现 gulp 是这样的 gulp task s
  • 在 GraphQL 服务器中实现访问控制的好模式是什么?

    背景 我有一组模型 包括用户和各种其他模型 其中一些模型包含对用户的引用 我公开这些模型 以便通过 GraphQL API 生成的查询Graffiti https github com RisingStack graffiti 由 Mong
  • 无法在渲染器进程中使用 Node.js API

    无法在 Electron 中使用任何与 Electron 或节点相关的操作 未定义获取错误过程 我检查了他们指导添加节点支持的各个地方 但这已经完成了 所以卡在这里 我的主要应用程序代码是 const electron require el
  • mongodb 和 pymongo 文档大小 16Mb 限制

    我正在使用 Windows 上的 showIncludes 标志和 nix 上的 H 标志来分析构建中的包含内容 我正在用 python 脚本解析这些信息 包含的每个文件都变成一个对象 列出其子文件 它包含的文件 和祖先 包含该文件的包含路
  • NodeJS:如何获取服务器的端口?

    您经常会看到 Node 的示例 hello world 代码 它创建一个 Http Server 开始侦听端口 然后执行以下操作 console log Server is listening on port 8000 但理想情况下你会想要
  • MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 条消息列表。使用emitter.setMaxListeners()来增加限制

    我知道这可能会标记为重复的解决方案 但堆栈溢出的解决方案对我不起作用 Problem node 5716 MaxListenersExceededWarning Possible EventEmitter memory leak detec
  • npm package.json bin 无法在 Windows 上运行

    我正在尝试通过 package json 启动我的 cli 工具bin财产 我有以下内容 name mycli bin bin mycli 当我在包路径中打开 cmd 并输入 mycli 时 它表示该命令无法识别 我应该运行 npm 命令吗
  • 无法在docker容器中安装npm?

    我正在数字海洋服务器的 Docker 平台上部署一个简单的 Node js 应用程序 包 json name docker centos hello private true version 0 0 1 description Node j
  • 使用 vscode 调试器调试 next.js

    我已经使用安装了一个项目创建下一个应用程序 https github com segmentio create next app 我需要使用我的编辑器 vscode 调试服务器端渲染 所以我访问过vscode recipes 如何调试 ne
  • React js Stripe 结账不起作用

    我正在尝试在 React js 应用程序中呈现条带结账默认表单
  • 使用nodegit切换分支/标签

    我整个早上都在尝试打开现有的存储库并使用 nodegit 更改分支或标签 文档内容很丰富 但似乎已经过时了 关于我做错了什么有什么想法吗 var NodeGit require nodegit var open NodeGit Reposi
  • 是否有“npmpublish-f”的解决方法

    现在npm publish f已弃用 是否有解决方法或软件包可以覆盖发布后的目标版本 我知道关于semver http semver org 我还想要npm publish f 您可以取消发布特定版本 然后重新发布它 npm unpubli
  • Nodejs 在循环中等待

    我想循环等待 实现此目的的最佳方法是什么 这是我的实际代码 var groups 461 6726 3284 4 121 11 399 1735 17 19 1614 groups forEach function value myfunc
  • node.js 本身还是 nginx 前端来提供静态文件?

    是否有更快的基准或比较 将 nginx 放在节点前面并让它直接提供静态文件或仅使用节点并使用它提供静态文件 nginx 解决方案似乎对我来说更易于管理 有什么想法吗 我不得不不同意这里的答案 虽然 Node 可以做得很好 但如果配置正确 n
  • 摆脱node-jsx

    在我的 NodeJS 应用程序的路由器中 我想渲染一个 React 应用程序 由于它没有被浏览器化 并且已反应 因此它返回unexpected token lt 构建时出错 我发现如果我require node jsx install 它不

随机推荐

  • 如何从 Visual Studio 中打开 TFS 中的单个变更集

    有人通过电子邮件给我发送了一个 TFS 变更集 ID 现在我正在尝试打开这个单个变更集 在 Visual Studio 中 VS 2008 如果重要的话 有一个简单的方法可以做到这一点吗 在 Visual Studio 中 键盘快捷键可用于
  • 在java中使用没有“循环”的标签

    我一直认为标签必须仅与循环一起使用 但似乎并非如此 给出这样的代码 public class LabelTest public static void main String args label1 System out println l
  • 鼠标放大算法(OpenGL)

    我有一个带有左上角坐标系的 OpenGL 场景 当我 glScale 时 它 从左上角的 0 0 放大 我希望它从鼠标坐标 相对于 OGL 框架 放大 这是怎么做到的 谢谢 我相信这可以通过四个步骤来完成 使用窗口系统 即 GLUT 或 S
  • 如果结果来得太晚,则限制但丢弃结果

    我正在编写一个用户界面 用户可以在其中输入搜索词 并且列表会不断更新以提供建议 我的第一反应是 Rx 原始 Throttle 是一个完美的匹配 但它让我成功了一半 这些建议需要一段时间才能获取 因此我在 UI 线程上异步获取它们 问题是 如
  • errno 值未更新 (c++)

    我是编码新手 目前正在学习 C 我了解一点 C 正在阅读 math h 中的函数并阅读 errno 根据我提到的网站 域错误 输入参数超出了运算的数学定义范围 例如 std sqrt 1 std log 1 或 std acos 2 如果设
  • 使用非原始参数进行参数化 JUnit 测试?

    很有可能使用参数运行 JUnit 测试 其中使用不同的数据多次执行相同的测试方法 如下所述 http junit org apidocs org junit runners Parameterized html http junit org
  • Spring可为空注释生成未知枚举常量警告

    在我的应用程序中 每当我添加 Nullable 从进口org springframework lang Nullable 到任何字段 我都会收到构建警告 警告 java 未知的枚举常量 javax annotation meta When
  • 将点添加到r中的3d图中

    我是 R 中 3D 绘图的初学者 我需要帮助 我尝试绘制一些简单的抛物面 library rgl x lt seq 1 1 0 2 y lt x f lt function x y x 2 y 2 z lt outer x y f pers
  • 如何在 Typescript 中使用 Ziggy 包

    所以我想创建一个使用 axios 检索数据的打字稿类 但我无法找到使用的方法route ziggy 在我的 Typescript 类中提供的函数 因为它不是 npm 包 我对 Node js 还是很陌生 任何帮助是极大的赞赏 import
  • 在 Python 中将列表项与大文件中的行进行匹配的最有效方法是什么?

    我有一个大文件 5Gb 名为my file 我有一个名为my list 读取文件中每一行的最有效方法是什么 如果来自my list匹配以下行中的项目my file 创建一个名为的新列表matches包含以下行中的项目my file以及来自的
  • docker 与 openshift 相比如何?

    Docker http www docker io and 开放式班次 https www openshift com 都是实现 PaaS 服务的框架 它们在架构和功能方面如何比较 主要区别在于 Docker 作为一个项目仅关注运行时容器
  • Android 获取屏幕高度

    Android 中如何获取屏幕的可用高度 我需要减去状态栏 菜单栏或屏幕上可能出现的任何其他装饰的高度 并且我需要它适用于所有设备 另外 我需要在 onCreate 函数中知道这一点 我知道这个问题之前已经被问过 但我已经尝试过他们的解决方
  • 值超出指定精度 0,小数位数为 0

    我正在尝试为 Apache Drill v1 15 创建自定义函数 当使用 Decimal 作为output数据类型 即使是最简单的例子也会失败 当使用其他数据类型 int float 时 它工作得很好 有没有简单的方法 如何使小数作为 U
  • HBase:get(...) 与扫描和内存表

    我正在 HBase 上执行 MR 减速器中的业务逻辑大量访问两个表 例如 T1 40k 行 和 T2 90k 行 目前 我正在执行以下步骤 1 在reducer类的构造函数中 执行如下操作 HBaseCRUD hbaseCRUD new H
  • PHAsset 获取原始文件名

    我想知道有没有办法使用PHAsset获取原始文件名 我使用以下代码来提取文件信息 PHImageManager defaultManager requestImageDataForAsset asset options requestOpt
  • 嵌入 CPython:如何构造 Python 可调用对象来包装 C 回调指针?

    假设我将 CPython 解释器嵌入到一个用 C 编写的较大程序中 该程序的 C 组件偶尔需要调用用 Python 编写的函数 并将回调函数作为参数提供给它们 使用 CPython扩展和嵌入 https docs python org 3
  • 如何连接SQLite3数据库服务器?

    我知道 SQLite3 不在客户端 服务器数据库应用程序模型下运行 所以我想知道如何使用 SQLite3 实际连接到 正在运行 的数据库服务器 这意味着如果我有一个在带有 SQLite3 的 Linux 上运行的数据库服务器 客户端将如何连
  • android从zip文件中解压缩文件夹并从该文件夹中读取内容

    在我的一个应用程序中 我需要提取一个 zip 文件 其中包含文件夹 并且该文件夹包含图像 这意味着 abc zip gt adb folder gt abc png 我想提取图像文件 我用下面的方法 private boolean extr
  • .NET Core 2.0 SDK 中 lib 和 ref 文件夹中的 .DLL 有什么区别?

    NET Core 2 0 SDK 中的每个 DLL 都有两个副本 它们具有不同的内容和文件大小 例如 c Program Files dotnet sdk 2 0 0 Microsoft Microsoft NET Build Extens
  • sailsjs 使用 mongodb 而不使用 ORM

    我想将 mongodb 与 sails 一起使用 但没有任何 ORM 下面是我连接 mongodb 的服务 服务 DbService js const MongoClient require mongodb MongoClient modu