Graphql 查询在 mongodb 聚合中返回空 id
Posted
技术标签:
【中文标题】Graphql 查询在 mongodb 聚合中返回空 id【英文标题】:Graphql query returns null id in mongodb aggregation 【发布时间】:2020-10-01 08:59:12 【问题描述】:Graphql 查询在 mongodb 聚合后返回 id null(在前端),但如果我在解析器聚合中打印 console.log,_id 不为 null。我不知道为什么在后端我有一个 id 而前面是空的。任何人都可以帮助我吗?谢谢
客户端架构
const ClientSchema = mongoose.Schema(
surname:
type: String,
require: true,
trim: true
,
company:
type: String,
require: true,
trim: true
,
salesman:
type: mongoose.Schema.Types.ObjectId,
require: true,
ref: 'User'
)
module.exports = mongoose.model('Client', ClientSchema)
订单架构
const OrderSchema = mongoose.Schema(
order:
type: Array,
require: true,
,
total:
type: Number,
require: true,
,
client:
type: mongoose.Schema.Types.ObjectId,
require: true,
ref: 'Client'
,
salesman:
type: mongoose.Schema.Types.ObjectId,
require: true,
ref: 'User'
,
stage:
type: String,
default: "PENDENT"
,
)
module.exports = mongoose.model('Order', OrderSchema)
解析器
getOrdersBySalesman: async (_, , ctx) =>
const mongoObjectId = mongoose.Types.ObjectId(ctx.user.id);
try
const orders = await Order.aggregate([
$match: salesman: mongoObjectId ,
$lookup:
localField: "client",
foreignField: "_id",
from: "clients",
as: "client"
,
$unwind: '$client' ,
$sort: 'client.company': 1
]);
console.log(orders);
return orders;
catch (error)
console.log(error);
Graphql 查询
const GET_ORDERS = gql`
query getOrdersBySalesman
getOrdersBySalesman
id
order
name
quantity
total
client
id
surname
company
stage
`
结果console.log解析器_id很好
_id: 5ee0da703b683e071c0adfe2,
order: [ [Object] ],
stage: 'PENDENT',
total: 6166.65,
client:
_id: 5ea813b3085b4417b8627557,
surname: 'NOU2',
company: 'NN',
salesman: 5ea568905d47ed2760e8d11c,
__v: 0 ,
salesman: 5ea568905d47ed2760e8d11c,
__v: 0 ]
graphql 查询后的前端结果 id: null
id: null,
order: […]
stage: 'PENDENT',
total: 6166.65,
client:
id: null,
surname: 'NOU2',
company: 'NN',
【问题讨论】:
id和_id是不同的字段吗? id 和 _id 是相同的字段。 id 在前端(graphql 查询),_id 在后端(mongodb)。有2个id,一个是订单的id,第二个是客户的id 您似乎认为一个会自动翻译成另一个。我建议验证情况是否如此,并使用某种文档参考来更新您的问题,以证明这种期望。 medium.com/the-ideal-system/… - 最初它甚至是一个对象,而不是一个字符串 【参考方案1】:只要您返回 ObjectID
,就在 GraphQL Schema 中为您的 id
使用类型 ID
,它应该可以正常工作。
type Order
id: ID
...
【讨论】:
以上是关于Graphql 查询在 mongodb 聚合中返回空 id的主要内容,如果未能解决你的问题,请参考以下文章
当graphQL的查询从mongodb返回空数据时,你应该检查啥?