2015-04-08 32 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