Mongoose 使用通配符查询 Where 子句

Xia*_*lin 5 javascript mongoose node.js

我有一个猫鼬查询如下

Computer
    .find()
    .where('OS').equals('Windows')
    .exec(function(err, items) {

  });
Run Code Online (Sandbox Code Playgroud)

它返回操作系统的所有computer记录Windows

现在我想用一个变量 osType来替换equals参数更灵活。

*可以为osType变量提供通配符吗?我测试了它,它不起作用。

var osType = '*';

Computer
    .find()
    .where('OS').equals(osType)
    .exec(function(err, items) {

  });
Run Code Online (Sandbox Code Playgroud)

或者有什么替代方法可以实现这一目标?

请不要删除该where条款,因为我希望它用于osType=windows, linux ...等......

rob*_*lep 4

我认为你必须在这两个语句之间切换:

// If you have a specific value you want to find:
Computer.find().where('OS').equals(osType).exec(...)
Run Code Online (Sandbox Code Playgroud)

和:

// All documents that have a `OS` property:
Computer.find().where('OS').exists().exec(...)
Run Code Online (Sandbox Code Playgroud)

您可以重写代码以适应这种情况:

var query = Computer.find().where('OS');
if (osType === '*') {
  query = query.exists();
} else {
  query = query.equals(osType);
}
query.exec(...);
Run Code Online (Sandbox Code Playgroud)

或者,您可以将Query#regex两种查询类型合并为一种,但我预计这会对性能产生影响。

  • `.*` 在正则表达式中表示“匹配所有”(我认为在 Mongoose 中它将变成 `Computer.find().where('OS').regex(/.*/).exec(...)` (2认同)