【问题标题】:Finding a MongoDB document by different types with Mongoskin使用 Mongoskin 查找不同类型的 MongoDB 文档
【发布时间】:2015-06-13 09:51:17
【问题描述】:

这是我的 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);
    });
});

【问题讨论】:

    标签: node.js mongodb express mongoskin


    【解决方案1】:

    不确定您的 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。从 url 中,只定义了 req.param.id 字段(来自 this => "/sku/:id")。例如,如果您使用此 url 测试您的 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",
        }
    }
    

    【讨论】:

    • 非常感谢,这是最好的解决方案!!但是,我有一个问题,如果我有一个描述字段,并且我想在每个产品的文本中查找一个单词?会怎么样?
    • @Despotars 你能再清楚一点吗?一个例子会很好。根据我的理解,您的意思是说,例如,您想在集合中搜索描述字段包含产品名称的文档,例如db.collection.findOne({"data.description": /productname/i})
    • 是的,抱歉。例如,寻找他们在描述中包含“park”一词的所有产品。然后像上面的例子一样发送这个词,我发送 sku
    • @Despotars 您能否为此创建另一个问题,因为在 cmets 中回答会很吵?我无法编辑我的答案以适应这一点,因为这是一个不同的问题。
    猜你喜欢
    • 2015-12-09
    • 2013-12-13
    • 2021-05-08
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多