我想知道是否有一个可以在Mongodb的搜索查询中使用的全能值,它将返回数据库中的所有条目?
给出一个“故事”模型,我知道找到所有故事的代码是“Story.find({})。exec()”。我正在努力弄清楚的是,如果我需要传递一个参数 - > “Story.find({termId:someValue})。exec()”,是否有一个像我所能传递的所有someValue,它会返回所有条目?
我需要找到这个的原因是我试图重载以下函数,在某些情况下,我会传递一个termId并希望限制搜索,而在另一种情况下,我会调用someFn一个参数,并希望它返回所有条目。
Q.all功能代码相对复杂,我宁愿不把它分成if-else块
function someFn(termId) {
Q.all([Q.nbind(..., Story.find({termId: termId}).exec()...]).spread()}
}
// Not so elegant solution I'm trying to avoid
function someFn(termId) {
if (typeof termId === 'undefined'){
Q.all([Q.nbind(..., Story.find({}).exec()...]).spread()}
}
else {
Q.all([Q.nbind(..., Story.find({termId: termId}).exec()...]).spread()}
}
}
答案 0 :(得分:3)
不,您没有可用于匹配任何termId
值的通配符值,但您可以通过以编程方式构建查询对象来使其更易于管理:
function someFn(termId) {
var query = {};
if (typeof termId !== 'undefined'){
query.termId = termId;
}
Q.all([Q.nbind(..., Story.find(query).exec()...]).spread()}
}
答案 1 :(得分:1)
您可以将termId
查询值设置为{$exists: true}
作为默认设置,然后在您的功能中覆盖。
因此,默认情况下,您的查询将如下所示:
{termId: {$exists: true}}
将返回所有已定义termId
字段的文档,这些文档将成为所有文档。只要您传递另一个值,它就会覆盖{$exists: true}
并按预期工作。
答案 2 :(得分:0)
这可以通过在 mongodb 查询中使用三元运算符来解决。
以下是我用来根据国家/地区搜索用户的示例。它允许您根据搜索词查询特定国家或所有国家的数据库。这也可以进行缩放以相应地添加额外条件。
let {country} = req.body
const students = await studentModel.find({country: country === 'all' ? {$exists: true} : country })