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 的相关文章

  • API 的集成与单元测试

    我们可以考虑向端点 单元或集成测试 发送请求吗 import lib from testing lib const testClient expect lib const response testClient request app ge
  • 获取数组中最高的角色

    我目前有一个数组u roles其中充满了来自 581199939464462340 等组的 ID 其次 我有一个字典 其中键是角色 ID 值是名称 例如 key 581199939464462340 value Member 现在我想获取数
  • 使用 Bot Framework 记录 Node.js-Azure 应用程序

    我有一个托管在 Azure 上的节点应用程序 Bot Framework 机器人 记录调试信息的最佳方法是什么 例如 据我所知 使用console log 没有帮助 因为 Azure 中没有可供查看的控制台 我也不想打电话session s
  • 导入JavaScript模块时什么时候需要添加文件扩展名?

    导入模块时 我注意到有时导入的文件有扩展名 例如 import myFunc from foo js 而其他库 导入不会 import myFunc from foo 这与 ES 模块与 CommonJS 模块有关吗 这取决于你的运行时和编
  • 如何在nodejs(tensorflow.js)中训练模型?

    我想做一个图像分类器 但我不会python Tensorflow js 使用我熟悉的 javascript 可以用它来训练模型吗 训练步骤是什么 坦白说 我不知道从哪里开始 我唯一想到的是如何加载 mobilenet 它显然是一组预先训练的
  • Lodash 根据键对对象列表进行排序

    我正在寻找基于键对对象列表进行排序 这是我的对象 var Categories social id social 001 lastModified 2 Day ago communication id communication 001 l
  • 猫鼬模式创建

    我刚刚开始使用猫鼬 我有一个使用 mongoose 的创建脚本 它使用示例数据创建模式和数据库 现在我编写实际的应用程序 我是否需要在每次应用程序运行时创建架构对象 或者它是否已经以某种方式可用 换句话说 我是否需要在每个使用 mongoo
  • 无论 Rosetta 如何,获取 M1 Mac 的真实架构

    我需要检索 Mac 的真实架构 无论该进程是否通过 Rosetta 运行 现在在 Node js 中 process arch回报x64并在外壳中 uname m回报x86 64 感谢 Ouroborus 这张纸条 https develo
  • Electron - 如何使用主进程和渲染进程

    此时 经过大量研究和谷歌搜索 我了解了 main 和 renderer 的作用 以及它们在 Electron 应用程序中的重要性 然而 我在这里向所有有知识的人发出我的请求 请给我一个机会clear解释如何在我的应用程序中具体实现这一点 我
  • MongoDb聚合

    如何使用 mongoDb 聚合编写模拟查询 select count as ccount from a group by a someField order by ccount desc limit 1 使用 mongoDb 中的 grou
  • 环境变量未加载到 Nodejs 中的 process.env

    我正在构建一个nodejs api 并设置了dotenv打包为开发依赖项以将变量加载到process env在开发人员的本地计算机上 请注意 当我登录时 我使用sudo i作为root 我的目的是在部署过程中 环境变量将在我的 Ubuntu
  • 客户端 websocket 限制消息长度

    我正在使用 node js 开发一个 websockter 服务器 并且我发现了 Chrome 中的一些怪癖 Chrome OS X 10 7 64 位 上的最大字符串长度为 17740 而 Firefox 似乎可以毫无问题地处理非常大的字
  • 当 Node.js 作为脚本运行时,“this”的上下文是什么? [复制]

    这个问题在这里已经有答案了 从节点 REPL node gt var x 50 gt console log x 50 gt console log this x 50 gt console log this global true 一切都
  • 当代理关闭并启动时,Node JS mqtt 客户端未收到订阅的消息

    我创建了一个 mqtt Node js 客户端 我的连接选项如下 mqttOptions clientId 100 keepAlive 1000 clean false reconnectPeriod 1000 will willMessa
  • 亚马逊 API 安全与 API 密钥?

    我已经在亚马逊 API 网关上部署了我的 REST API 并且我面前有一个存在安全问题的场景 我正在为所有 api 请求使用 api 密钥 我想知道该 api 密钥是否以某种方式公开 并且我们知道已发布的应用程序正在使用相同的 api 密
  • 如何解决 fs.existsSync 不是函数

    在 NodeJS 中我有 const fs require fs if fs existsSync some path 但我收到错误 类型错误 fs existsSync 不是函数 经过一番搜索后 我读到了Webpack自带require哪
  • 使用 PassportJS 时将用户序列化/反序列化到会话中的目的是什么?

    使用 PassportJS 时将用户序列化 反序列化到会话中的目的是什么 我以前用过JSP 似乎对这些东西没有概念 它控制如何将用户实例保存到会话存储中 例如连接 redis https github com visionmedia con
  • 如何防止 babel 转译生成器函数

    我对 babel 有一个奇怪的问题 当我在我的一个类中使用一个简单的生成器函数时 babel 会创建一个函数 其中包含对regeneratorRuntime var marked3 0 getQueryDummy map regenerat
  • node-cron 每 3 小时运行一次作业

    我试图每 3 小时运行一次 node cron 作业 但我不确定我做得是否正确 现在我正在使用 8 它是否正确 您应该将秒和分钟值清零 并使用 3 的步长 其 cron 表达式是 0 0 3 其计算结果为 每 3 小时 0 秒 0 分钟 你
  • MongoDB:如何使用单个命令更新多个文档?

    我惊讶地发现以下示例代码仅更新单个文档 gt db test save id 1 foo bar gt db test save id 2 foo bar gt db test update foo bar set test success

随机推荐

  • 如何从 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