使用Mongoskin以不同类型查找MongoDB文档

时间:2015-04-08 12:28:44

标签: node.js mongodb express mongoskin

这是我在MongoDB中的文档示例:

{
    "_id": ObjectId('5525039895884d66710d0fc3'),
    "prid": "63527",
    "data": {
        "sku": "HF22-81639",
        "name": "Product Test",
        "ean": "8763900872512",
        "description": "This product is my first test",
    }
}

我想制作几种搜索方法,搜索条件是按SKU,EAN或PRID搜索。我创建了方法,但是没有用,这是我创建的方法之一的示例,它不起作用,只是查找我的数据库的第一个文档,但没有任何搜索条件。

如果它完美运行,则搜索“_id”:

// GET - "_id"
app.get("/:id", function(req, res, next) {
    req.collection.findOne({
        _id: id(req.params.id)
    }, function(e, result) {
        if(e) return next(e);
        res.send(result);
    });
});

此搜索“sku”不起作用(这是我需要帮助的地方):

// GET - "sku"
app.get("/sku/:id", function(req, res, next) {
    req.collection.findOne({
        sku: id(req.params.sku)
    }, function(e, result) {
        if(e) return next(e);
        res.send(result);
    });
});

1 个答案:

答案 0 :(得分:2)

不确定您的id()功能是如何定义的,但您可以尝试:

// GET - "sku"
app.get("/sku/:id", function(req, res, next) {
    req.collection.findOne({
        "data.sku": req.params.id
    }, function(e, result) {
        if(e) return next(e);
        res.send(result);
    });
});

在原始代码中,req.params.sku未定义,因为req.params对象没有字段sku。在网址中,只定义了req.param.id字段(来自此=> "/sku/:id")。例如,如果您使用此网址测试API:

http://localhost:3000/sku/HF22-81639

将带回文件:

{
    "_id": ObjectId('5525039895884d66710d0fc3'),
    "prid": "63527",
    "data": {
        "sku": "HF22-81639",
        "name": "Product Test",
        "ean": "8763900872512",
        "description": "This product is my first test",
    }
}