Mongoose 聚合 $match 返回空结果

Posted

技术标签:

【中文标题】Mongoose 聚合 $match 返回空结果【英文标题】:Mongoose aggregate $match returns empty result 【发布时间】:2021-03-30 20:48:32 【问题描述】:

当我使用“findOne”功能时。 我得到了正确的结果。

但是当我使用聚合和 $match 时,我得到空结果。 是不是代码错了?

我应该使用聚合,所以我不能使用 findOne 函数。 我尝试了很多代码。但我找不到解决方案。

// 解析器.js

const Mongoose = require('mongoose');
const  ObjectId  = Mongoose.Types;
const  GraphQLScalarType  = require('graphql');
const resolvers = 
  Query: 
    getClinic: (_,  _id ) => 
      console.log("getClinic", _id);
      const data = Clinic.aggregate([
         $match:  _id: ObjectId(_id)  ,
        
          $lookup: 
            // do something
          ,
        ,
      ]);
      return data;
    ,  
  

// schema.js

import mongoose from 'mongoose';

const  Schema  = mongoose;
const clinicSchema = new Schema(
  
    id: String,
    crn: String,
    name: String,
  ,
   collection: 'clinic' ,
);
export default mongoose.model('Clinic', clinicSchema);

// typedefs.graphql

type Clinic 
  _id: ID
  crn: String
  name: String
  //...


type Query 
  getClinic(_id: ID!): Clinic!

// Query
query  
  getClinic(_id: "5fcf19678c032a999f9e9dbc") 
    _id
    crn
    name
  


// return 

  "data": 
    "getClinic": 
      "_id": null,
      "crn": null,
      "name": null
    
  

谢谢

【问题讨论】:

【参考方案1】:

您与要匹配的 id 进行比较的两种不同类型。 所以你似乎正在尝试将字符串与对象 id 进行比较

诊所模式 id => 像这样 Schema.Types.ObjectId

希望对你有帮助

【讨论】:

以上是关于Mongoose 聚合 $match 返回空结果的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 聚合返回空结果并在 mongo 控制台中工作 [重复]

mongoose 聚合 $avg $ 或返回空值

MongoDB Mongoose 聚合查询深度嵌套数组删除空结果并填充引用

Mongoose,MATCH 运算符不返回结果

猫鼬聚合返回空结果[重复]

猫鼬聚合返回空结果[重复]