使用变量作为数值而不是字符串值传递的保存值

时间:2015-11-21 06:14:53

标签: mongodb meteor

我写了一个自定义搜索项目:

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”

如何保存数字?

2 个答案:

答案 0 :(得分:1)

对于不区分大小写的搜索,请使用以下代码段:

{ 'title' : { $regex : title, $options: 'i' } }

您必须提供不区分大小写搜索的选项。

答案 1 :(得分:1)

这是架构问题。 @Luna,你必须在插入数据时小心。例如,在插入perDay字段时,不要像 - {' perDay' :' 500'}而是插入 - {' perDay':500}。这会将您的字段插入为numertic,因此您的相同查询将正常工作。

在现有数据上,您可以按如下方式触发文档的更新查询:update({find query}{$set:{'perDay':'500}})这将仅更新您的1文档。您必须更正集合中的所有文档。然后,您可以触发您在顶部提到的搜索查询。