feathers-mongodb Service.find ({query: {_id}}) возвращает ноль - PullRequest
0 голосов
/ 31 октября 2018

У меня есть схемы ниже:

students.graphql.schema.js

export default [
  `
  type StudentsWithPagination {
    total: Int
    items: [Students]
  }

  type Students {
    _id: String!
    name: String
    address: Addresses
  }
`,
];

addresses.graphql.schema.js

export default [
      `
  type AddressesWithPagination {
    total: Int
    items: [Addresses]
  }

  type Addresses {
    _id: String!
    title: String
  }
`,
];

Я создал две службы, запустив feathers generate service Students.service.js и address.services.js .

Когда я ищу адреса по title, я получаю результат. Однако, когда я ищу по _id, я получаю ноль. Что-то вроде:

const studentsResolvers = {
    Students: {
        address: student => {
            const query = {
                _id: student.address
            }
            return Addresses.find({ query }).then(result => {
                console.log(result)
            })
        }
    }
}

Приведенный выше код дает null, а student.address возвращает право address._id. Я все еще получаю null, даже я жестко код student.address с правом address._id

Приведенный выше код вернет null, если я не буду искать по названию адреса. Что-то вроде:

const query = {
   title: 'my-location'
}

_id относится к типу String, а не ObjectID.

Что я делаю не так?

1 Ответ

0 голосов
/ 06 ноября 2018

Как задокументировано в адаптере feathers-mongodb , поскольку сама MongoDB (в отличие от Mongoose) не имеет схемы, все параметры запроса должны быть преобразованы в тип в базе данных в хуке вручную. Пример может быть адаптирован соответственно для $in запросов:

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

app.service('users').hooks({
  before: {
    find(context) {
      const { query = {} } = context.params;

      if(query._id) {
        query._id  = new ObjectID(query._id);
      }

      if(query.age !== undefined) {
        query.age = parseInt(query.age, 10);
      }

      context.params.query = query;

      return Promise.resolve(context);
    }
  }
});
...