我写了一个自定义搜索项目:
items: function() {
var location = Session.get('location');
var category = Session.get('category');
var title = Session.get('title') || '';
var minPrice = Session.get('minPrice') || '0';
var maxPrice = Session.get('maxPrice') || '500';
// some if/else if statements for client-side search inputs (no problem with these)
return Items.find({status: 'active', "title":{$regex: (title)}, location: location, category: category, "perDay":{"$gte": minPrice, "$lte": maxPrice}});
//problem part is: "perDay":{"$gte": minPrice, "$lte": maxPrice}
}
问题是,它没有显示最小 - 最大金额的正确结果。其余的工作正常。
IE:我把它放在0和0之间55,它返回550的项目。我放在0和0之间。 6到9,它仍然返回550的项目。看起来它匹配第一个数字或类似的东西。当我输入549到maxPrice时,它不会返回该项目。 551返回。我在这里做错了什么?
编辑:
如评论中所述,它在DB中保存为字符串。现在的问题是,我将它作为变量传递给我的服务器方法,如下所示:
addItem: function(title, description, featured, category,location, perHour, perDay, perWeek, owner){
Items.insert({
title: title,
description: description,
featured: featured,
category: category,
location: location,
perHour: perHour,
perDay: perDay,
perWeek: perWeek,
owner: owner,
createdAt: new Date(),
status:'active'
});
}
它会像这样保存perDay字段:“perDay”:“35”
如何保存数字?
答案 0 :(得分:1)
对于不区分大小写的搜索,请使用以下代码段:
{ 'title' : { $regex : title, $options: 'i' } }
您必须提供不区分大小写搜索的选项。
答案 1 :(得分:1)
这是架构问题。 @Luna,你必须在插入数据时小心。例如,在插入perDay字段时,不要像 - {' perDay' :' 500'}而是插入 - {' perDay':500}。这会将您的字段插入为numertic,因此您的相同查询将正常工作。
在现有数据上,您可以按如下方式触发文档的更新查询:update({find query}
,{$set:{'perDay':'500}})
这将仅更新您的1文档。您必须更正集合中的所有文档。然后,您可以触发您在顶部提到的搜索查询。