1. ホーム
  2. javascript

[解決済み] Mongoose クエリの Where 節とワイルドカード

2022-02-16 13:59:46

質問

以下のようなmongooseクエリを持っています。

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

  });

をすべて返します。 computer のレコードに Windows OSです。

今度は 変数 osType を置き換えるために equals パラメータを使用することで、より柔軟に対応することができます。

ワイルドカードを使用することはできますか? *osType という変数がありますか?テストしてみましたが、うまくいきません。

var osType = '*';

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

  });

あるいは、これを実現するための代替案は何か?

を削除しないようお願いします。 where 節を使用するようにしたいので osType=windows, linux ... などなど...

解決方法は?

この2つの文言を切り替える必要がありそうですね。

// 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 を使えば、両方のクエリタイプを1つにまとめることができますが、これはパフォーマンスに影響があると思われます。