2015-04-08 3 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); 
    }); 
}); 

Этот поиск «Код» не работает (это где мне нужна помощь):

// 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"). Так, например, если вы проверяете API с этим URL:

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

да извините. Например, ищите все продукты, которые они имеют в своем описании, слово «парк». И отправьте слово, как в приведенном выше примере, я отправляю sku – Despotars

Смежные вопросы