具有空ID的graphql查询返回对象

时间:2019-01-19 08:30:09

标签: mongodb graphql aggregate

Graphql返回带有空ID的Oject。 与mongodb。

我觉得很奇怪。

如果我删除MailType ID上的new GraphQLNonNull(), 它可以与id: null一起使用,其他字段也可以正常工作。

const MailType = new GraphQLObjectType({
    name: 'Mail',
    fields: () => ({
        id: { type: new GraphQLNonNull(GraphQLID), },
...
})

const Query = {
    mails: {
        type: new GraphQLList(MailType),
        args: {
            senderId: { type: GraphQLID },
            isOffline: { type: GraphQLBoolean },
        },
        async resolve(root, args, req, ctx) {
            if (args.isOffline === false) {
                let a = await model.aggregate([
                  { $match: { isOffline: false } },
                ]);
                let b = await model.find({ isOffline: false });

                console.log(JSON.stringify(a) == JSON.Stringify(b)) /// return true
                return a // error
                return b // working
            }
            return model.find({senderId: args.senderId});
        }
    }
}
// with a
    "errors": [
        {
            "message": "Cannot return null for non-nullable field Mail.id."
        }]

我遇到了两个小时的麻烦,但没有得到答案。 有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

您可能在mongodb模式中犯了一个错误,而不是graphQl。 确保您没有通过id键定义自己的ID,应该为_id

例如,如果您使用猫鼬,它可能是这样的:

const MailSchema = new Schema({
  _id: {
    type: String,
    unique: true,
  },
  ....
  ....
});