我有以下数据库模型:
- 每个
Mediablock
恰好包含对一个UTS
对象和一个Media
对象的引用.
- 每个
UTS
个对象包含rawText
和normalisedText
- 每个
Media
对象包含一个url和一个时间戳
我的schema.prisma
看起来是这样的:
datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model Mediablock {
id String @id @default(auto()) @map("_id") @db.ObjectId // gen a new, unique id
UTS UTS @relation(fields: [utsId], references: [id])
utsId String @unique @map("uts_id") @db.ObjectId
Media Media @relation(fields: [mediaId], references: [id])
mediaId String @unique @map("media_id") @db.ObjectId
}
model UTS {
id String @id @default(auto()) @map("_id") @db.ObjectId
rawText String
normalisedText String
createdAt DateTime @default(now())
Mediablock Mediablock?
}
// // Mediablocks contain a Video object and connect back to the Mediablock.
// // mediablockId must have @db.ObjectId to match up with Mediablock's id type
model Media {
id String @id @default(auto()) @map("_id") @db.ObjectId
url String
createdAt DateTime @default(now())
Mediablock Mediablock?
}
我的resolvers
看起来是这样的:
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
//This resolver retrieves mediabooks from the "mediabooks" array above.
module.exports = {
Query: {
allMediablocks: () => prisma.mediablock.findMany(),
allMedia: () => prisma.media.findMany(),
allUTS: () => prisma.uts.findMany(),
},
};
我的typedefs
看起来是这样的:
module.exports = `
type Mediablock {
id: ID!
uts: UTS
media: Media # can be null when the text is generated first
}
type UTS {
id: ID!
rawText: String!
normalisedText: String!
}
type Media {
id: ID!
url: String!
createdAt: String!
}
# The "Query" type is special: it lists all of the available queries that
# clients can execute, along with the return type for each. In this
# case, the "allMediablocks" query returns an array of zero or more Mediablocks (defined above).
type Query {
allMediablocks: [Mediablock]
allMedia: [Media]
allUTS: [UTS]
}
`;
我的种子文件如下所示:
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
const mediaData = [
{
UTS: {
create: {
rawText: 'Welcome',
normalisedText: 'welcome',
},
},
Media: {
create: {
url: 'https://www.youtube.com/watch?v=kq9aShH2Kg4',
createdAt: '2022-09-29T12:00:00.000Z',
}
}
}
];
async function main() {
console.log(`Started seeding ...`);
for (const d of mediaData) {
const mediablock = await prisma.Mediablock.create({
data: d,
});
console.log(`Created Mediablock with id: ${mediablock.id}`);
}
console.log(`\nSeeding complete.`);
}
main()
.then(async () => {
await prisma.$disconnect();
})
.catch(async (e) => {
console.error(e);
await prisma.$disconnect();
process.exit(1);
});
我的问题是,当我试图查询allMediablocks
时,我无法获得UTS
或Media
数据中的任何数据.
query allMediaBlocks {
allMediablocks {
uts {
normalisedText
}
media {
url
}
}
}
// response
{
"data": {
"allMediablocks": [
{
"uts": null,
"media": null
}
]
}
}
我只得到了null
个值,而实际上,数据库(MongoDB)包含对其他表中这两个对象的引用.
我做错了什么?我的解析程序是不是不正确? 我的模式 struct 是否不适合MongoDB?