在MongoDB中查询记录时,我在Mongoose中使用NodeJS时遇到了一个奇怪的问题。我有一个产品模型文件是这样的:
const mongoose = require("mongoose");
const productSchema = new mongoose.Schema({
name: String,
brand: String,
shorDescription: String,
description: String,
price: Number,
salePercent: Number,
rating: Number,
color: String,
size: [String],
});
const Product = mongoose.model("Product", productSchema);
module.exports = Product;在控制器文件中,我的代码如下所示:
const Product = require("../models/product.model");
exports.getProducts = async (req, res) => {
const products = await Product.find({ rating: { $lte: "5" } });
console.log(`products: ${products}`);
res.json({
products: products,
});
};Product.find({})完美工作->返回产品集合中的所有记录
Product.find({brand: "Nike"})仍然可以正常工作,->会返回所有的“耐克”产品。
奇怪的是,当我在Product.find({ rating: { $lte: "5" } })中使用$选择器时,当我有几个产品符合产品集合中的条件时,我什么也没有收到。
谁来帮帮我:((
发布于 2021-11-21 06:20:14
MongoDB查询运算符是类型敏感的。这里的问题是查询表达式是一个字符串("5"),但数据是一个数字(例如5)。因为类型是不可比较的,所以它们永远不会与$lte表达式匹配。
例如,对{rating: {$lte: "5"}}的查询将匹配如下文档:
{rating: "5"}
{rating: "4.5"}
{rating: "25"}
{rating: ""}但不像:
{rating: 5}
{rating: 4.5}https://stackoverflow.com/questions/70052216
复制相似问题