代码之家  ›  专栏  ›  技术社区  ›  Latheesan

在GraphQL和MongoDB中加载关系数据

  •  1
  • Latheesan  · 技术社区  · 8 年前

    这是我的模式:

    type User {
        _id: ID!
        username: String
        email: String!
        firstName: String
        lastName: String
        avatar: String
        createdAt: Date!
        updatedAt: Date!
    }
    
    type Tweet {
        _id: ID!
        text: String!
        user: User!
        favoriteCount: Int!
        createdAt: Date!
        updatedAt: Date!
    }
    

    这是我的 Tweet

    import mongoose, { Schema } from 'mongoose';
    
    const TweetSchema = new Schema({
        text: {
            type: String,
            minLength: [5, 'Your tweet is too short.'],
            maxLength: [144, 'Your tweet is too long.']
        },
        user: {
            type: Schema.Types.ObjectId,
            ref: 'User'
        },
        favoriteCount: {
            type: Number,
            default: 0
        }
    }, { timestamps: true });
    
    export default mongoose.model('Tweet', TweetSchema);
    

    import { graphqlExpress } from 'apollo-server-express';
    import { makeExecutableSchema } from 'graphql-tools';
    
    import typeDefs from '../graphql/schema';
    import resolvers from '../graphql/resolvers';
    
    const schema = makeExecutableSchema({
        typeDefs,
        resolvers
    });
    
    const app = express();
    app.use(
        '/graphql', 
        graphqlExpress(req => ({ 
            schema
        }))
    );
    

    我使用以下代码模拟一些用户并使用faker发布推特,如下所示:

    https://pastebin.com/raw/kJ9m8KjR

    当整个程序运行时,我可以看到mongodb中充满了与用户链接的虚拟推文,如下所示:

    enter image description here

    enter image description here

    1 回复  |  直到 8 年前
        1
  •  2
  •   Daniel Rearden    8 年前

    您的解析器会收到如下推文:

    Tweet.find({}).sort({ createdAt: -1 });
    

    如果你查一下 docs

    Tweet.find({}).populate('user').sort({ createdAt: -1 });