2015-04-08 30 views
2

这是文件的例子,我在我的MongoDB:寻找不同类型的一个MongoDB的文档与Mongoskin

{ 
    "_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); 
    }); 
}); 

回答

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。从url只定义了req.param.id字段(从此=>"/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", 
    } 
} 
+1

非常感谢你,这是最好的解决办法!但是,我有一个问题,如果我有一个描述字段,并且我想在每个产品的文本中查找一个字词?它会怎样? – Despotars

+0

@Despotars你能更清楚一点吗?一个例子会很好。从我的理解来看,你的意思是说,比如说,你想在集合中搜索描述字段包含产品名称的文档,例如'db.collection.findOne({“data.description”:/ productname/i })'? – chridam

+0

对不起。例如,在他们的描述中查找所有产品中的“park”一词。然后发送上述示例中的单词,我发送sku – Despotars