javascript - 如何返回 Mongoose 嵌套的对象数组
问题描述
我正在尝试返回我在猫鼬模型中声明的嵌套对象,如下所示:
const MessageSchema = new Schema({
messageLog: [
{
transcript: {
type: String
},
recipient: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
sender: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
}
}]
});
但是,当我尝试通过 graphql 解析器查询内部对象时,我无法取回内部对象的值(转录本、发件人、收件人在 gql 操场上为空,但在 db 中更新)我已将其设置如下:
query = args.messageId ? { _id: args.messageId } : { _id: new ObjectId() };
const message = await Message.findOneAndUpdate(query, {$addToSet: {messageLog: {transcript: args.messageBody, sender: args.senderId, recipient: args.recipientId}}}, {$setOnInsert: args, upsert: true, new: true, runValidators: true})
return message.messageLog;
我能够在数据库中创建新对象和嵌套的 messageLog,但由于某种原因我只能返回 id,而不是 messageLog 对象数组。通常问题在于我如何解决(解析器),但我也会把我的 typeDef 放在这里,以防问题在那里。
type Message {
_id: ID
transcript: [String]
recipient: [User]
sender: [User]
}
解决方案
因此,如果有人有类似的架构设置和问题,解决方案是也引用带有嵌套级别的 typeDefs。因此,由于转录本、收件人和发件人向下嵌套了一层,因此必须为嵌套对象定义 typeDef,然后在消息类型上引用如下:
type messageLog {
_id: ID
transcript: String
recipient: User
sender: User
}
type Message {
_id: ID
messageLog: [messageLog]
}
并为用户使用填充,因为它是由 objectId 引用的模式
推荐阅读
- node.js - Prevent npm start if node version mismatch
- c++ - 如何在函数参数中初始化向量
- angular - 未找到模块:错误:无法解析“@angular/core/src/render3”:ViewChildren QueryList
- javascript - 如何将图像存储到 vue 的组合 API 中的变量中?
- javascript - 使用 javascript / node js 获取地图函数之外的数据
- python-3.x - Django ManyToManyField 将用户限制为单个字段
- q# - 如何让 Hellow Quantum 世界在 Visual Studio 2019 中运行
- python - Python:为其他架构的windows捆绑python程序
- split - 如何在 SYBASE ASE 中将连接列拆分为多行或多列
- laravel - 当我将 laraval 应用程序上传到实时服务器时遇到此错误