【问题标题】:Mongodb: findById() returns no valueMongodb:findById() 没有返回值
【发布时间】:2017-12-17 06:20:29
【问题描述】:

即使id 存在于数据库中,以下findById() 也会返回null

router.get('/product/:id', function (req, res) {

console.log("product id = " + req.params.id);

//produces product id = 596161e1734d1d25634366ce

var id = req.params.id;

Product.findById({_id: req.params.id})
    .exec(function (err, product) {
        if (err) {
            console.error('Error retrieving all product by id!');
        } else {
            console.log('server product = ' + JSON.stringify(product));
            res.json(product);
        }
    })
})

数据库中的目标文档:

{
    "_id": {
        "$oid": "596161e1734d1d25634366ce"
    },
    "producttype": "stove",
    "name": "30 in. 4.8 cu. ft. Electric Range in Stainless Steel",
    "brand": "Amana",
    "model": "AER6303MFS",
}

型号:

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const ProductSchema = new Schema({
    _id: String,
    productType: String,
    name: String,
    brand: String,
    model: String,
    price: Number,
    discount: Number,
    description: String,
    rating: Number,
    sku: String,
    warranty: String,
});

var Product = mongoose.model('Product', ProductSchema, 'product');
module.exports=Product;                  

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    尝试从您的 ProductSchema 中删除 _id。 id 将由 mongodb 自动生成。之后尝试使用

    Product.find({_id: req.params.id})
        .exec(function (err, product) {
            if (err) {
                console.error('Error retrieving all product by id!');
            } else {
                console.log('server product = ' + JSON.stringify(product));
                res.json(product);
            }
        })
    })
    

    或者如果您想使用按 id 查找,则使用

    Product.findById(req.params.id)
        .exec(function (err, product) {
            if (err) {
                console.error('Error retrieving all product by id!');
            } else {
                console.log('server product = ' + JSON.stringify(product));
                res.json(product);
            }
        })
    })
    

    【讨论】:

    • 工作就像一个魅力。谢谢。
    • 我该怎么做?
    • 你的问题的upvote和downvote下面应该有打勾的符号。
    【解决方案2】:

    取自docs,您是否尝试过只传递req.params.id 而不是一个对象?像这样:

    Product.findById(req.params.id)
        .exec(function (err, product) {
            if (err) {
                console.error('Error retrieving all product by id!');
            } else {
                console.log('server product = ' + JSON.stringify(product));
                res.json(product);
            }
        })
    })
    

    【讨论】:

    猜你喜欢
    • 2016-12-12
    • 2017-02-28
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多