我有一个 Mongoose 查询如下

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

  });

它使用computer OS返回所有Windows记录。

现在,我想使用变量 osType替换equals参数,以更加灵活。

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

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

  });

或有什么替代方法可以做到这一点?

请不要删除where子句,因为我希望它用于osType=windows, linux ...等。

最佳答案

我认为您将不得不在以下两个语句之间进行切换:

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

和:
// All documents that have a `OS` property:
Computer.find().where('OS').exists().exec(...)

您可以重写代码以适应以下情况:
var query = Computer.find().where('OS');
if (osType === '*') {
  query = query.exists();
} else {
  query = query.equals(osType);
}
query.exec(...);

另外,您可以使用 Query#regex 将这两种查询类型折叠为一种,但是我希望这会对性能产生影响。

10-06 05:28