在 Mongoose 中使用连接和过滤器进行查询

2024-03-04

我是 Mongodb 的新手,并且在我使用 MEAN 堆栈构建的 Web 应用程序中使用它。我的目标是通过连接两个表并对它们应用过滤条件来查询它们。例如:我有两个表 - 自行车-自行车 ID、注册号、品牌、型号和预约 - 预约日期、状态、自行车(参考自行车对象),我只想显示那些没有预约状态=的自行车“已预订”。我想在 Mongoose 中完成以下 SQL。

Select bike.* from Bike inner join Appointment on Bike.BikeID = Appointment.BikeID and Appointment.Status != 'Booked'

我正在使用以下代码,但没有得到所需的结果。有人可以帮我解决这个问题吗?

app.get('/api/getbikeappo*',function(req,res){
        var msg="";
        //.find({cust:req.query._id})
        //.populate('cust','email')
        ubBike.aggregate([
                {
                    $match:
                    {
                        cust : req.query._id
                    }
                },
                {
                    $lookup:
                    {
                        from: "appos",
                        localField: "_id",
                        foreignField: "bike",
                        as : "appointments"
                    }
                },
                {
                    $match:
                    {
                        "appointments" : {$eq : []}
                    }
                }
            ])
            .exec(function(err,bikes){
                 res.send(bikes);
                if(err) throw err;
            });
    }); 

bikes - collection
{
    "_id": {
        "$oid": "57fb600fdd9070681de19c18"
    },
    "brand": "Splendor",
    "model": "Splendor",
    "year": "2002",
    "kms": 0,
    "regno": "TN02M8937",
    "cust": {
        "$oid": "57f8c44466cab97c1355a09a"
    },
    "__v": 0
}
{
    "_id": {
        "$oid": "57fb6025dd9070681de19c19"
    },
    "brand": "Activa",
    "model": "Activa",
    "year": "2016",
    "kms": 0,
    "regno": "TN14M3844",
    "cust": {
        "$oid": "57f8c44466cab97c1355a09a"
    },
    "__v": 0
}

appointment collection
----------------------
{
    "_id": {
        "$oid": "57fb6040dd9070681de19c1a"
    },
    "appoidt": {
        "$date": "2016-10-15T18:30:00.000Z"
    },
    "reqdt": {
        "$date": "2016-10-10T09:32:48.694Z"
    },
    "status": "Booked",
    "bike": {
        "$oid": "57fb600fdd9070681de19c18"
    },
    "cust": {
        "$oid": "57f8c44466cab97c1355a09a"
    },
    "__v": 0
}
-----------------
Expected output is 

{
    "_id": {
        "$oid": "57fb6025dd9070681de19c19"
    },
    "brand": "Activa",
    "model": "Activa",
    "year": "2016",
    "kms": 0,
    "regno": "TN14M3844",
    "cust": {
        "$oid": "57f8c44466cab97c1355a09a"
    },
    "__v": 0
}

你就快到了,你只需要正确的$match https://docs.mongodb.com/manual/reference/operator/aggregation/match/查询如下:

ubBike.aggregate([
    { "$match": { "cust": req.query._id } },
    {
        "$lookup": {
            "from": "appos",
            "localField": "_id",
            "foreignField": "bike",
            "as": "appointments"
        }
    },
    { "$match": { "appointments.status": { "$ne": "Booked" } } }
]).exec(function(err, bikes){
    if(err) throw err;
    res.send(bikes);    
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Mongoose 中使用连接和过滤器进行查询 的相关文章

  • 在承诺中运行同步函数

    我是 JS 和异步操作的新手 在使用express的nodeJS路由器中 我使用mongoose从mongo聚合了一些数据 该数据是每隔 15 分钟从不同站点收集的天气数据 我使用猫鼬聚合管道处理数据 以获取每小时数据并按每个站点进行分组
  • MongoDB 如何使用 $date 运算符进行查询?

    编辑 上下文 我正在使用 Talend ETL 工具 并在查询中使用 ISODate 或 Date 或 new Date 如下所示失败并出现错误 因此我需要解决方法 dt ISODate 2014 01 01 dt Date 2014 01
  • 将字符串数组转换为对象 Id 数组

    我有一个字符串数组 let stringObjectIdArray fssdlfsd343 43434234242 342424242 我想使用 mongoose 类型将字符串数组更改为对象 Id 数组 但它不起作用 它仅适用于字符串而不是
  • mongodb - 检索数组子集

    看似简单的任务对我来说是一个挑战 我有以下 mongodb 结构 services TCP80 data status 1 delay 3 87 ts 1308056460 status 1 delay 2 83 ts 1308058080
  • Inno Setup安装先决条件[重复]

    这个问题在这里已经有答案了 我正在通过 Inno Setup 创建一个安装程序 我看到很多关于如何检测先决条件是否存在的代码示例 但没有任何关于当我找不到先决条件时如何实际安装先决条件的代码示例 我确信它非常简单 但是我该如何安装先决条件呢
  • 猫鼬的深层填充

    我有两个模式 一张用于用户 另一张用于帖子 在用户模式中 我有latestPost的一个属性 它是帖子模式中条目的ObjectId 当我加载用户对象时 我想将 lastestPost 作为对象获取 其中包含用户架构中作者的用户名 其中作者是
  • Mongoose 对 Promise 拒绝处理

    我有点与 NodeJS 中的 Promise 模式作斗争 我正在数据库中查找用户 然后使用用户引用保存新实体 但是当用户不在数据库中时 我应该返回拒绝 但我不确定如何正确执行 有没有办法做得更好 顺便说一句 对不起 咖啡脚本 User fi
  • CoreMongooseArray 到普通数组

    我正在从一个架构中选出 2 个元素 并希望在另一个架构中进行更新 为此 我使用切片方法将数组中的前 2 个元素列入候选名单 但我越来越 CoreMongooseArray 元素1 元素2 而不是 元素1 元素2 如何删除 CoreMongo
  • 加密 mongodb 中的密码字段

    我有以下代码 它插入userName and password进入数据库 但密码以纯文本格式存储 我的意思是 当我查看数据库时 我可以看到插入的密码 我想存储password in encrypted format MongoClient
  • 在 MongoDb 上序列化仅获取属性

    使用 C 6 我可以写 public class Person public Guid Id get public string Name get public Person Guid id string name Id id Name n
  • MongoDB - 打开和关闭连接 - 建议良好实践

    我通过 Node js 的驱动程序使用 MongoDB 我通常打开一个连接 通过connect 方法 任何时候我需要执行操作并关闭它 通过close 方法 一旦我完成 在我的程序中 我自然需要对 MongoDB 执行许多操作 因此我会多次打
  • keystonejs 模型中的动态类型选择

    我想在 adminUI 中使用一个组合框 其中包含来自 Web 服务的字段 我正在考虑使用预 查找 挂钩获取数据 然后覆盖模式中 受众 属性的选项属性 Schema Compliance add title type Types Text
  • node-mongodb-native的插入性能

    我正在使用 MongoDB 测试 Node js 的性能 我知道其中每一个都很好 彼此独立 但我正在尝试一些测试来感受它们 我遇到了这个问题 但无法确定来源 问题 我正在尝试在单个 Node js 程序中插入 1 000 000 条记录 它
  • (节点:20732)[DEP0018] DeprecationWarning:未处理的承诺拒绝已被弃用。未来在nodejs中

    我正在尝试在我的应用程序中生成确认链接 虽然它工作正常并且也生成链接 但是当我访问该链接时 它在 Chrome 控制台中显示 POST http localhost 3000 api auth confirmation 400 Bad Re
  • 如何使用 PyMongo 在重复键错误后继续插入

    如果我需要在 MongoDB 中插入尚不存在的文档 db stock update one document set document upsert True 将完成这项工作 如果我错了 请随时纠正我 但是 如果我有一个文档列表并想将它们全
  • Angular js 服务器端过滤器和分页

    我有几个输入字段 我们可以使用带有搜索名称的输入字段作为示例 当有人在该字段中输入内容时 我希望能够过滤对象的结果 但我想做过滤器服务器端而不是客户端 我有一个包含大量记录的数据库 因此我不想返回所有记录并在客户端进行过滤 这确实会减慢速度
  • 使用 ObjectId 键和字符串数组定义映射作为 mongoose 模式中的值

    我在为数据库创建 Mongoose 架构时遇到问题 我想创建一个以 objectId 作为键 以字符串值数组作为值的映射 我能得到的最接近的是 var schema new Schema map myId type mongoose Sch
  • 获取mongodb中单个查询的最小值和最大值

    考虑 Words 中的以下文档 id 1 usages 2 word Name id 2 usages 1 word Street id 3 usages 1 word House id 4 usages 3 word Table id 5
  • ReferenceError:MongoDB shell 中未定义 require

    我尝试通过 Windows 命令 Windows 8 1 从 Mongo 客户端连接 MongoDB 当我使用require 在 javascript 中 我遇到如下错误 有人有同样的问题吗 我有错过任何一个吗require有关的npm安装
  • 在 Nodejs 中,如何停止 FOR 循环直到 MongoDB 调用返回

    我正在研究下面的代码片段 我有一个名为 stuObjList 的 JSON 对象数组 我想循环遍历数组以查找具有特定标志集的特定 JSON 对象 然后进行数据库调用以检索更多数据 当然 FOR 循环不会等待数据库调用返回并到达 j leng

随机推荐

  • 通过 USB 记忆棒携带和操作整个开发盒。可行的?

    最近我一直在考虑投资一个有价值的 USB 笔式驱动器 类似于 并在虚拟机上安装操作系统并开始在其上进行开发 我的想法是 我希望能够携带我的开 发箱 成为一名Windows 发行版用于 Net 开发和Linux发行版像 RoR Perl 之类
  • 为一个用户提供多个订阅的最佳方式(iOS、Android)

    有人有为应用程序实施多个订阅模型的经验吗 我无法找到有关该主题的正确文档 创建应用内订阅模型的最常见方法是每位用户一次订阅 但我想为每一项提供一项订阅 在我的应用程序中 这意味着如果用户想要订阅多个项目 则可以创建多个订阅 每个项目的功能都
  • 如何在列表列表中找到共同元素?

    我试图弄清楚如何比较 n 个列表以找到共同元素 例如 p 1 2 3 1 9 9 1 2 4 gt gt print common p gt gt 1 现在 如果我知道元素的数量 我可以进行如下比较 for a in b for c in
  • WCF FaultException 是否支持与 Java Web 服务故障的互操作

    我编写了一个 java axis2 1 4 1 Web 服务和 net 3 5 WCF 客户端 我正在尝试捕获抛出的 wsdl 错误 与 net 2 0 不同 net 3 5 声称支持wsdl fault并且服务引用向导确实在客户端代理中生
  • iOS9 ATS:基于 HTML5 的应用程序怎么样?

    根据来自的文档https developer apple com library content releasenotes General WhatsNewIniOS Articles iOS9 html apple ref doc uid
  • 按哈希表中的值排序 - Ruby

    我有以下国家 地区哈希值 COUNTRIES Albania gt AL Austria gt AT Belgium gt BE Bulgaria gt BG 现在 当我输出散列时 值不是按字母顺序排列的 AL AT BE BG 而是按无意
  • 使用 jQuery,从跨域 url 访问 json,其中 json 可能格式不正确

    我正在使用 jQuery 的 ajax 函数来访问跨域 url url 将返回 json 我正处于发现阶段 但我认为 因为 json 值包含几个 quot 字符串 所以 json eval 会抛出错误并停止客户端脚本的执行 我得到的错误是
  • 使用 protobuf-net 序列化数组时如何处理空值?

    以下语句失败NullReferenceException TypeModel Create DeepClone new string 1 检查源代码发现异常是故意抛出的 这意味着null数组中的值违反了协议缓冲区规范 有道理 null不是任
  • Fabricjs intersectsWithObject 当对象为 Fabric.Rect 时返回 false

    我试图在观察 object moving 事件时确定fabric Rect何时与另一个fabric Rect重叠 但fabric Group与fabric Rect之间的结果不一致 当我将 Group 移动到 Rect 实例上时 inter
  • Mysql 闰年 Dayofyear

    在以下查询中 不考虑闰年 SELECT e id e title e birthdate FROM employers e WHERE DAYOFYEAR curdate lt DAYOFYEAR e birthdate AND DAYOF
  • ASP.NET Identity 用户名中的特殊语言字符

    我想使用一些特殊字符 例如 在用户名中 但我面临这个错误 IdentityResult result UserManager Create applicationUser password Error 用户名 test 无效 只能包含字母或
  • pygame 中 sys.exit() 的问题

    我正在学习使用 Pygame 当我使用sys exit 我遇到了一个问题 这是代码 import pygame sys os from pygame locals import pygame init window pygame displ
  • 仅当 r 中满足条件时,数据帧内的增量计数器

    我想创建一个累积增量计数器 仅在满足条件时才会增加 DT lt data table id c 1 1 1 1 1 1 1 2 2 2 b c 10L 5L 3L 4L 2L 6L 1L 3L 5L 7L 我没有得到想要的结果rleid因为
  • 将不同数据集与 R 中的堆积条形图进行比较

    我需要比较两种不同的方法 每种方法使用堆叠条形样式在一张图中有 3 个不同的结果 我想画一个图 以便 x 轴显示实验 y 轴显示结果 每个条形以堆叠条形格式填充 3 个结果 experiment method resuult1 result
  • 我的应用程序可以与 Moodle 通信吗?

    我正在考虑构建一个学生应用程序 它将使用 Moodle 数据 并在上传新文件时通知用户 也许还可以执行诸如检查成绩等操作 我对 Android 编程很陌生 很容易与技术术语混淆 我浏览了一下网络 发现有一个 API 但我并不真正 100 知
  • 使用 SMTPHandler 整理 Python 日志记录 MemoryHandler 中的输出

    我设置了日志记录模块 MemoryHandler 来对 SMTPHandler 目标的调试和错误消息进行排队 我想要的是当进程出错时发送一封电子邮件 其中包含截至该点的所有调试语句 每行一个 相反 我收到的是每条调试消息的单独电子邮件 这看
  • 在 HTML 中添加滚动条

    这是一个非常菜鸟的问题 我想我已经知道答案了 但是 您可以将滚动条添加到 div CSS div height 100px overflow auto jsFiddle http jsfiddle net alexdickson Wdj3M
  • Grafana 多值浮点 histogram_quantile

    嗨 我正在强制解决 histogram quantile 问题 如果我将变量设置为多值 这样我就可以重复面板 然后我收到错误消息 字符 21 处解析错误 意外字符 我的要求是 histogram quantile percentile av
  • 这两个查询之间的最佳实践

    我昨天参加了一个用户组会议 他们指出使用参数化查询比对查询进行编码更好 这让我开始思考 这是否有什么好处 显然规模比这大得多 DECLARE Client1 UNIQUEIDENTIFIER Client2 UNIQUEIDENTIFIER
  • 在 Mongoose 中使用连接和过滤器进行查询

    我是 Mongodb 的新手 并且在我使用 MEAN 堆栈构建的 Web 应用程序中使用它 我的目标是通过连接两个表并对它们应用过滤条件来查询它们 例如 我有两个表 自行车 自行车 ID 注册号 品牌 型号和预约 预约日期 状态 自行车 参