【问题标题】:Mongoose query doesn't work with where() when filtering by numeric values按数值过滤时,Mongoose 查询不适用于 where()
【发布时间】:2013-09-26 14:44:49
【问题描述】:

所以我在使用 where 子句时遇到了使用 mongoose 查询的问题。它们在我过滤字符串时起作用,但不适用于数字。

这是我的模型/模式:

// Schema
var Wheel = new  mongoose.Schema({
    name: String,
    method: String,
    size: Number,
    width: Number,
    weight: Number
});


// Model
var WheelModel = mongoose.model('Wheel', Wheel);

此查询有效:

var query = WheelModel.find();

query.where('method').equals('Cast/Spun');
query.limit(10);

query.exec(function (err, wheels) {
    // wheel objects are returned
});

这是数组 'wheels' 中的一个轮子对象示例

{
"_id": "523de98b263add11a8d4fc4a",
"name": "AME Circlar RS",
"weight": 18.1,
"width": 7,
"method": "Cast/Spun",
"size": 15
}

下面的这个查询返回 [],如果我按大小、宽度和重量进行过滤,以及任何数字都会这样做

var query = WheelModel.find();

query.where('size').equals(15);
query.limit(10);

query.exec(function (err, wheels) {
    if (!err) {
        return res.send(wheels);
    } else {
        return console.log(err);
    }
});

我也试过

query.where('size', 15);
query.where('size', '15');
var query = WheelModel.find({ size: 15});

如果我去:

query.where('size').ne(15);

然后我得到结果,但它们将包含大小为 15 的值。所以我怀疑我有一些类型问题,我只是不知道是什么。任何帮助将不胜感激!

【问题讨论】:

  • 您能否验证并告诉我们 MongoDB 中字段 size 的类型?
  • 它们是字符串。我还没有检查,但我知道这是问题所在。我记得由于我在模式中定义的类型而导致 mongoose 抛出错误,所以我只是假设 mongoose 会抛出错误......错误的假设。
  • Schema Types 中,检查示例并特别检查age 字段或Number 类型字段上的特定example。希望这会结束您对解决方案的搜索。快乐编码;)

标签: node.js mongoose


【解决方案1】:

尝试以下架构,它应该适用于您(根据您的 cmets 的理解),使用相同的查询,即query.where('size').equals(15)

var Wheel = new  mongoose.Schema({
    name: String,
    method: String,
    size: { type: Number },
    width: { type: Number},
    weight: { type: Number }
});

有关更多信息,请查看 API 文档中的 Schema Types

【讨论】:

    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 2021-08-16
    • 2014-12-27
    • 2013-05-03
    • 1970-01-01
    • 2019-11-01
    相关资源
    最近更新 更多