通过_id获取qraphQL数据

时间:2015-09-02 07:01:57

标签: node.js mongodb graphql

我最近开始使用GraphQL。我可以使用名称的基础从mongodb集合中获取记录,但是如果我尝试使用相同的代码通过_id获取数据(mongodb生成的id),我将获得所有字段的空值。 这是我的示例代码......

query: new GraphQLObjectType({
    name: 'RootQueryType',
    fields: {
    // To get a user based on id
      getUser: {
        type: UserType,
        args: {
          _id: {
            description: 'The username of the user',
            type: new GraphQLNonNull(GraphQLString)
          }
        },

       resolve: (root, {_id}) => {
         //Connect to Mongo DB
        return mongo()
            .then(db => { 
             return  new Promise(
              function(resolve,reject){
                 //Query database
                 let collection = db.collection('users');
                 collection.findOne({ _id},(err,userData) => {             
                  if (err) {
                    reject(err);
                    return;
                  } 
                  console.log(userData);
                  resolve(userData);
                });
               })
             });
            }
          },

,示例查询为:

{ 
      getUser ( _id: "55dd6300d40f9d3810b7f656") 
      {  
               username,
               email,
               password
      } 
}

我得到的反应如下:

{
    "data": {
        "getUser": null
    }
}

如果需要,请建议我进行任何修改...... Thanq。

1 个答案:

答案 0 :(得分:2)

因为" _id"由mongoDB生成的字段不仅仅是一个字符串,它实际上是ObjectId("你的ID字符串在这里")。

因此,在您的查询中,mongoDB找不到任何等于您提供给它的字符串的_id。

尝试使用collection.findById()。