mongodb 个查询的综合值
Catch-all value for mongodb queries
我想知道是否有一个可以在 Mongodb 的搜索查询中使用的包罗万象的值,它会 return 数据库中的所有条目?
给一个"Story"模型,我知道找到所有故事的代码是"Story.find({}).exec()"。我正在努力弄清楚的是,如果我需要传递一个参数 -> "Story.find({termId: someValue}).exec()",是否有一个像“*”这样的捕获所有我可以传递的值,它将 return 所有条目?
我需要找到它的原因是我试图重载以下函数,在某些情况下,我会传递一个 termId 并想限制搜索,而在另一种情况下,我会调用someFn 没有参数,并希望它 return 所有条目。
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()}
}
}
不,没有可用于匹配任何 termId
值的通配符值,但您可以通过以编程方式构建查询对象来使其更易于管理:
function someFn(termId) {
var query = {};
if (typeof termId !== 'undefined'){
query.termId = termId;
}
Q.all([Q.nbind(..., Story.find(query).exec()...]).spread()}
}
您可以将 termId
查询值默认设置为 {$exists: true}
,然后在您的函数中覆盖。
所以默认情况下,您的查询将如下所示:
{termId: {$exists: true}}
这将 return 定义了 termId
字段的所有文档,这将是所有文档。一旦您传递另一个值,它将覆盖 {$exists: true}
并按您预期的方式工作。
这可以通过在 mongodb 查询中使用三元运算符来解决。
下面是我用来根据国家/地区搜索用户的示例。它允许您根据搜索词查询特定国家或所有国家的数据库。这也可以相应地缩放以添加额外的条件。
let {country} = req.body
const students = await studentModel.find({country: country === 'all' ? {$exists: true} : country })
我想知道是否有一个可以在 Mongodb 的搜索查询中使用的包罗万象的值,它会 return 数据库中的所有条目?
给一个"Story"模型,我知道找到所有故事的代码是"Story.find({}).exec()"。我正在努力弄清楚的是,如果我需要传递一个参数 -> "Story.find({termId: someValue}).exec()",是否有一个像“*”这样的捕获所有我可以传递的值,它将 return 所有条目?
我需要找到它的原因是我试图重载以下函数,在某些情况下,我会传递一个 termId 并想限制搜索,而在另一种情况下,我会调用someFn 没有参数,并希望它 return 所有条目。
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()}
}
}
不,没有可用于匹配任何 termId
值的通配符值,但您可以通过以编程方式构建查询对象来使其更易于管理:
function someFn(termId) {
var query = {};
if (typeof termId !== 'undefined'){
query.termId = termId;
}
Q.all([Q.nbind(..., Story.find(query).exec()...]).spread()}
}
您可以将 termId
查询值默认设置为 {$exists: true}
,然后在您的函数中覆盖。
所以默认情况下,您的查询将如下所示:
{termId: {$exists: true}}
这将 return 定义了 termId
字段的所有文档,这将是所有文档。一旦您传递另一个值,它将覆盖 {$exists: true}
并按您预期的方式工作。
这可以通过在 mongodb 查询中使用三元运算符来解决。
下面是我用来根据国家/地区搜索用户的示例。它允许您根据搜索词查询特定国家或所有国家的数据库。这也可以相应地缩放以添加额外的条件。
let {country} = req.body
const students = await studentModel.find({country: country === 'all' ? {$exists: true} : country })