如何使用 SailsJS 和 MongoDB 使用动态条件数进行查询
How to do query with dynamic numbers of condition with SailsJS and MongoDB
我在 MongoDB 中使用 SailsJS。
对于模型 "accounts",我使用以下代码:
attributes: {
campaignID : { type: 'string' },
cell : { type: 'string' },
firstname : { type: 'string' },
lastname : { type: 'string' },
ssn : { type: 'integer' }
}
问题是我不知道如何编写代码来查询模型,我可以为模型中的属性设置任意数量的条件。
例如,一个查询可以是查询所有带有 cell="5" 和 ssn="123456789" 的查询
另一个查询可以是查询所有带有 lastname="Borune" 的。
目前我在控制器中实现了以下代码:
list: function(req,res) {
Accounts.find().where({
campaignID' : {
contains : req.param('campaignID')
},
cell:{
contains : req.param('cell')
}
}).exec(function(err,data){
if (err) res.json({error:'true'});
res.json(data);
});
}
但问题是,当我只想为以下地址等条件使用一个属性时,由于参数中未定义单元格,因此不会返回任何文档。
http://localhost:1337/search?campaignID=testID2
如何写条件代码,这样我就可以指定任意数量的条件,并得到符合所有条件的文档。
在您实际尝试查找任何内容之前,只需形成您的搜索条件。如果您使用查询字符串传递参数(即 /search?campaignID=foo&cell=42
),这应该类似于:
list: function(req,res) {
// req.query is {campaignID: 'foo', cell: '42'}
var criteria = _.mapValues(req.query, function(val) {
return {contains: val};
})
// criteria is {campaignID: {contains:'foo'}, cell: {contains: '42'}}
Accounts.find(criteria).exec(function(err,data){
if (err) {
return res.json({error:'true'});
}
res.json(data);
});
}
如果您想使用请求负载而不是查询字符串,您应该更改 req.query to req.body。
如果您不通过配置将它添加到 sails 自动加载,请不要忘记控制器文件顶部的 var _ = require('lodash')
。
我在 MongoDB 中使用 SailsJS。 对于模型 "accounts",我使用以下代码:
attributes: {
campaignID : { type: 'string' },
cell : { type: 'string' },
firstname : { type: 'string' },
lastname : { type: 'string' },
ssn : { type: 'integer' }
}
问题是我不知道如何编写代码来查询模型,我可以为模型中的属性设置任意数量的条件。 例如,一个查询可以是查询所有带有 cell="5" 和 ssn="123456789" 的查询 另一个查询可以是查询所有带有 lastname="Borune" 的。 目前我在控制器中实现了以下代码:
list: function(req,res) {
Accounts.find().where({
campaignID' : {
contains : req.param('campaignID')
},
cell:{
contains : req.param('cell')
}
}).exec(function(err,data){
if (err) res.json({error:'true'});
res.json(data);
});
}
但问题是,当我只想为以下地址等条件使用一个属性时,由于参数中未定义单元格,因此不会返回任何文档。
http://localhost:1337/search?campaignID=testID2
如何写条件代码,这样我就可以指定任意数量的条件,并得到符合所有条件的文档。
在您实际尝试查找任何内容之前,只需形成您的搜索条件。如果您使用查询字符串传递参数(即 /search?campaignID=foo&cell=42
),这应该类似于:
list: function(req,res) {
// req.query is {campaignID: 'foo', cell: '42'}
var criteria = _.mapValues(req.query, function(val) {
return {contains: val};
})
// criteria is {campaignID: {contains:'foo'}, cell: {contains: '42'}}
Accounts.find(criteria).exec(function(err,data){
if (err) {
return res.json({error:'true'});
}
res.json(data);
});
}
如果您想使用请求负载而不是查询字符串,您应该更改 req.query to req.body。
如果您不通过配置将它添加到 sails 自动加载,请不要忘记控制器文件顶部的 var _ = require('lodash')
。