【发布时间】:2013-12-13 09:58:50
【问题描述】:
我有以下 Mongoose 架构
var People= new Schema({
firstName: String,
alias: [String]
});
我正在寻找一种方法来返回其中一个 alias 字符串匹配或作为给定值内的子字符串存在的所有文档。
例如:
{ firstName: Jon
alias: ['foo', 'fuchs']}
{ firstName: Ann
alias: ['bar', 'fuchsbar']}
{ firstName: Paul
alias: ['foobar']}
- 如果我传入
foob,我想返回 Jon。 - 如果我传入
foobar,我想返回 Jon、Ann 和 Paul。 - 如果我传入
fuchs,我想返回 Jon。
在 Mongo 中可以做这样的子串查询吗?
【问题讨论】:
-
看起来我可以使用 $where 运算符解决这个问题 - 传递给 $where 运算符的函数是否接受参数?
-
对于子字符串匹配,您可能需要 $regex 运算符。
-
@HectorCorrea 实际上,情况正好相反。我正在 寻找 子字符串,而不是寻找包含
/substring/i的任何内容。 -
这似乎会非常慢......它需要点击每个文档和每个数组元素并进行昂贵的(相对而言)搜索。
-
@WiredPrairie 是的。这是在现在选择之后手动(节点端)发生的(这对性能造成了巨大的影响)。如果 Mongo 不支持直接查询(这将比 Node 中的后处理更快),那么可能是时候重新考虑架构设计了。
标签: javascript node.js mongodb mongoose