gpt4 book ai didi

javascript - 在 where 子句中使用两个字段时的 Mongoose 转换问题

转载 作者:行者123 更新时间:2023-11-28 20:34:25 24 4
gpt4 key购买 nike

我仍在尝试了解 mongoDB/mongoose,但无法解决以下查询的问题;

Link
.find()
.where('active').equals(true)
.where('access_count').gt(0).lte('access_limit')
.limit(5)
.sort('-created')
.exec(function(err,latest)

这将返回以下转换错误;

CastError: Cast to number failed for value "access_limit" at path "access_count"
at SchemaNumber.cast

这是由 .where('access_count').gt(0).lte('access_limit') 引起的,我认为这是由于文档上两个字段的比较造成的?是否有正确的方法来执行此操作以及调试此类问题的任何建议?

作为引用,架构定义为:

var LinkSchema = new Schema({
token: {type: String, unique: true, index: true, required: true }
, title: {type: String}
, url: {type: String, required: true}
, active: {type: Boolean, default: true}
, created: {type: Date, default: Date.now}
, access_count: {type: Number, default: 0}
, access_expiry: Date
, access_limit: {type: Number, default: 0}
})

最佳答案

要将查询中的一个字段与另一个字段进行比较,您必须使用 $where子句:

Link
.find()
.where('active').equals(true)
.where('access_count').gt(0)
.$where('this.access_count <= this.access_limit')
.limit(5)
.sort('-created')
.exec(function(err,latest)

$where 可能会很慢,因此请尽可能使用普通的 where 子句来减少 $where 所需的文档数量执行结束。

关于javascript - 在 where 子句中使用两个字段时的 Mongoose 转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15728532/

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