我正在使用包含多組單選按鈕和複選框的快遞構建表單。提交時,表單選擇用於查詢數據庫中的「部分」集合。使用表單提交的數據同時使用單選按鈕和複選框查詢mongodb
形式例如:
<input type="radio" name="radio" value="radioOption1">
<input type="radio" name="radio" value="radioOption2">
<input type="checkbox" name="checkbox" value="checkOption1">
<input type="checkbox" name="checkbox" value="checkOption2">
如果你選擇第一個單選和第一個複選框選項,並提交時,req.body樣子:
{radio:'radioOption1', checkbox:'checkOption1'}
使用此蒙戈查詢時,工作正常使用匹配的選項名稱查找文檔:
db.collection('parts').find({option_name:{$in:req.body}})
但是,如果勾選兩個複選框, q.body變成:
{radio:'radioOption1', checkbox:['checkOption1','checkOption2']}
雖然$在還發現單選按鈕鍵/值匹配,它不會爲複選框工作,現在他們都存儲在一個數組。有沒有辦法改變我的查詢或我的數據來解決這個問題?
編輯: Parts集合有一個看起來像文件:
{
"option_name" : "radioOption1",
"price" : 100
}
{
"option_name" : "radioOption2",
"price" : 200
}
{
"option_name" : "checkOption1",
"price" : 300
}
{
"option_name" : "checkOption2",
"price" : 400
}
EDIT2: 丹麥的回答解決了這個謎團。在快遞,運行查詢之前,我做的:
var productOptions = []
// iterate thru req.body
for (var key in req.body) {
// check if array
if(Object.prototype.toString.call(req.body[key]) === '[object Array]') {
// push each array value to productOptions
for(var i = 0;i < req.body[key].length;i++) {
productOptions.push(req.body[key][i])
}
} else {
productOptions.push(req.body[key])
}
}
然後改變了查詢,以使用新的productOptions數組:
db.collection('parts').find({option_name:{$in:productOptions}})
這一工程!請讓我知道,如果我的JavaScript可能更清潔。
看了這幾分鐘,但試圖讓我的頭在你的模式。如果您可以使用您正在搜索的集合中的幾個示例文檔進行編輯,那將會很好。另外$ in需要一些不是你傳入的字段或文檔。 –
編輯包含一些示例文檔。我想我的大問題是我是否應該使用$ in,或者如果有另一種方式。 $ in「works」,並且找到req.body中任何屬性值的文檔,它是一個字符串,但它不解析數組的屬性值。 – spencer