gpt4 book ai didi

mongodb - Graphql 为 Mongoose 聚合查询返回空 ID

转载 作者:行者123 更新时间:2023-12-02 02:42:45 30 4
gpt4 key购买 nike

Graphql 为 mongoose 聚合查询返回 null id,但可以正常工作其他 mongoose 查询。

这是我的 Mongoose 模式:

const { Schema } = mongoose;
const ObjectId = Schema.Types.ObjectId;

const productSchema = new Schema({
_id: ObjectId,
price: Number
})

const Product = mongoose.model('Product', productSchema, 'Product')

这是我的 Graphql 架构:
type Product {
id: ID
price: String
}

Graphql 正常查询:
   context.Product.findOne()

结果与 console.log:
[ {
price: 10,
_id: 5d7f8efebff791dcd3bb1b69
}]

使用 graphql 的结果:
 "getSearch": [
{
"id": "5d7f8efebff791dcd3bb1b69",
"price": 10,
}]

这里一切都很好。
现在问题是聚合查询:

GraphQL 查询:
context.Product.aggregate(
[
{ $sample: { size: 1 } }
]
)

结果与 console.log:
[ { _id: 5d7f8f23bff791dcd3bb1da3,
price: 5
}]

使用 GraphQL 的结果:
 "test": [
{
"id": null",
"price": 7,
}]

这里的问题是:
  • id 为空
  • console.log 和 graphql 的响应是不同的对象
  • 最佳答案

    MongoDB 中的文档通常没有 id 属性,只有 _id 属性。这显示在您看到的控制台输出中。但是, Mongoose 模型实例确实有一个用于 id 的 getter,它返回 id 的值。 From the docs :

    Mongoose assigns each of your schemas an id virtual getter by default which returns the documents _id field cast to a string, or in the case of ObjectIds, its hexString.


    findfindOne 等方法返回的是具有此 getter 的 Model 实例。但是,使用 aggregate 会导致返回纯 JavaScript 对象(没有 getter)。

    您可以为 id 字段编写解析器以从 id_id 中提取值:
    function resolve (parent, args, context, info) {
    return parent.id || parent._id
    }

    关于mongodb - Graphql 为 Mongoose 聚合查询返回空 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58166982/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com