【发布时间】:2015-07-14 22:35:18
【问题描述】:
API 上的查询结构如下:
../myapi/products?_q=genre,retail_price&_a=g,p&p.gt=10&p.lt=20&g.eq=POP
有两个数组:_q 列出查询参数,_a 列出相应的别名。所以 p -> retail_price 和 g -> 流派
我可以把它解析成:
{$and : [ genre: { '$eq': 'POP' }, retail_price: { '$gt': '10' }, retail_price: { '$lt': '20' } ]}
几乎很开心。但是这种方法有几个问题: 1. '$eq' 等而不是 $eq 等 2.数值现在是字符串'10'
我认为(2)是一个讨厌的。由于服务器无法知道类型(可能应该是 '10' 而不是 10)。
所以,我想尝试另一种方法。这就是将它全部解析成一个查询字符串,然后用 JSON.parse() 进行转换
首先我提出了一些查询字符串并在 shell 中尝试:
db.products.find({$and: [{genre: { $eq: 'ROC'}}, {retail_price: {$gt:7}}, {retail_price: {$lt:10}}]})
像魅力一样工作。
然后我尝试了这个:
var queryStr = "{$and: [{genre: { $eq: 'ROC'}}, {retail_price: {$gt:7}}, {retail_price: {$lt:10}}]}";
并且:(产品是猫鼬模型)
Product.find(JSON.parse(queryStr), function(err, product) {
if (err)
res.send(err);
res.json(product);
});
令我惊讶的是,它根本不起作用。
也在做
console.log(JSON.stringify(JSON.parse(queryStr)));
不将输出写入控制台。
这里发生了什么?
【问题讨论】:
标签: json node.js mongoose stringify