Mongoose aggregate $match возвращает пустой результат

#mongoose

#mongoose

Вопрос:

Когда я использую функцию «findOne». Я получаю правильный результат.

Но когда я использую aggregate и $match, я получаю пустые результаты. Есть ли какой-либо неправильный код?

Я должен использовать aggregate, поэтому я не могу использовать функцию findOne. Я перепробовал много кода. Но я не могу найти решение.

// resolver.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:

Два разных типа, которые вы сравниваете с идентификатором, который пытаетесь сопоставить. Итак, вы, похоже, пытаетесь сравнить строку с идентификатором объекта

Идентификатор схемы клиники => нравится эта схема.Типы.ObjectId

Надеюсь, это помогло