- 構文エラーは、
services.port_infoを引用符で囲む必要があるためです。 - ただし、
$elemMatchネストされたフィールドは現在サポートされていません とにかく - 幸い、
$elemMatchは必要ありません。 この種のクエリの場合
これは次のことを行う必要があります:
db.hosts.find({ ip : "127.0.0.1"}, { "services.port_info.product" : "ssh" });
$elemMatch 配列オブジェクト内の複数の基準に一致させる場合に必要です。たとえば、「ポートが9000で、プロトコルがUDPであるすべてを検索する」などです。これは、データ構造ではサポートされていません。 port_infoの理由がわかりません オブジェクトの配列です(ポートが2つの異なるサービスに属する可能性がある不確実な状況の場合)-単一のオブジェクトの場合、$elemMatch サポートされます。
また、このようなクエリは常にオブジェクト全体を返すことに注意してください。