Mongodb 如何在GraphQL resolve中映射mongo子文档?我得到空值

Mongodb 如何在GraphQL resolve中映射mongo子文档?我得到空值,mongodb,graphql,apollo,Mongodb,Graphql,Apollo,我正在尝试使用mongoose在我的mongo数据库中获取一组记录,并将其发送到GraphQL解析函数。我可以拿到文件。但是子文档总是返回null。如果没有子文档,我会得到一个空数组。例如,我的数据如下所示: [ { name: '2222dhjshjshfjfsf', address: 'dgdgdsf', contactNumber: 'dgdgsdfs', logo: 'sfsf', billingDetails: 'fdsfsdf',

我正在尝试使用
mongoose
在我的mongo数据库中获取一组记录,并将其发送到GraphQL解析函数。我可以拿到文件。但是子文档总是返回null。如果没有子文档,我会得到一个空数组。例如,我的数据如下所示:

[
  {
    name: '2222dhjshjshfjfsf',
    address: 'dgdgdsf',
    contactNumber: 'dgdgsdfs',
    logo: 'sfsf',
    billingDetails: 'fdsfsdf',
    assignedEmployee: 'sff',
    keyContactPersons:
    [ { name: 'gdgdg',
        contactNumber: 'dgdfg',
        email: 'gdgdfgdfgdsff@gmail.com',
    } ],
    active: true,
    },
    ...
]
const Company = mongoose.model('Company', new mongoose.Schema(), 'companies');

export default {
  Query: {
    companies: () =>
      new Promise((resolve, reject) =>
        Company.find({})
          .lean()
          .exec((error, doc) => {
            if (error) {
              reject(error);
            }

            resolve(doc);
          }))
  }
};
我的解析函数如下所示:

[
  {
    name: '2222dhjshjshfjfsf',
    address: 'dgdgdsf',
    contactNumber: 'dgdgsdfs',
    logo: 'sfsf',
    billingDetails: 'fdsfsdf',
    assignedEmployee: 'sff',
    keyContactPersons:
    [ { name: 'gdgdg',
        contactNumber: 'dgdfg',
        email: 'gdgdfgdfgdsff@gmail.com',
    } ],
    active: true,
    },
    ...
]
const Company = mongoose.model('Company', new mongoose.Schema(), 'companies');

export default {
  Query: {
    companies: () =>
      new Promise((resolve, reject) =>
        Company.find({})
          .lean()
          .exec((error, doc) => {
            if (error) {
              reject(error);
            }

            resolve(doc);
          }))
  }
};
这是模式:

const typeDefs = gql`
  type KeyContactPerson {
    name: String!
    contactNumber: String
    email: String
  }

  type Company {
    slug: String!
    name: String
    address: String
    contactNumber: String
    logo: String
    billingDetails: String
    assignedEmployee: String
    keyContactsPersons: [KeyContactPerson]
    active: String
  }

  type Query {
    company(_id: ID!): Company
    companies: [Company]
  }
`;

export default makeExecutableSchema({
  typeDefs,
  resolvers
});
当我控制台记录find方法返回的数据
doc
时,它具有正确的值。问题似乎出在类型定义上。以下是我从GraphQL查询中获得的示例输出:

{
  "data": {
    "companies": [
      {
        "slug": "abc-4",
        "name": "abc",
        "keyContactsPersons": []
      },
      {
        "slug": "abc-5",
        "name": "abc",
        "keyContactsPersons": null
      },
    ]
  }
}

第一条记录没有任何作为子文档的
keyContactsPersons
。它返回一个空数组。第二个有一些值。但它返回null。你知道为什么会发生这种情况吗?

你在mongodb检查过你的数据吗?一个字段可以是空数组,另一个字段可以为空。在解析(doc)之前,您是否记录了“console.log(doc)”以检查数据是否正常?我认为您可以写入keyContactPersons而不是keyContacstPersons。在您的示例数据中,您写的是“keyContactPersons”,但在您的typedef中,您写的是“keyContactsPersons”@alesanderfrança哦,非常感谢。是的,这就是问题所在。真的很抱歉…:-)这可能发生在某人身上;)你在mongodb检查过你的数据吗?一个字段可以是空数组,另一个字段可以为空。在解析(doc)之前,您是否记录了“console.log(doc)”以检查数据是否正常?我认为您可以写入keyContactPersons而不是keyContacstPersons。在您的示例数据中,您写的是“keyContactPersons”,但在您的typedef中,您写的是“keyContactsPersons”@alesanderfrança哦,非常感谢。是的,这就是问题所在。真的很抱歉…:-)这可能发生在某人身上;)