Docs Menu

in

in演算子は、指定されたパスにある BSON numberdatebooleanobjectIduuid 、またはstringの値の配列を検索し、 を返しますフィールドの値が指定された配列内の任意の値と等しいドキュメント。 フィールドに配列が含まれている場合、 in演算子は、指定された配列内のいずれかの値と一致する要素が少なくとも 1 つ含まれる配列をフィールドに保持されているドキュメントを選択します。

in演算子の構文は次のとおりです。

{
$search: {
"index": <index name>, // optional, defaults to "default"
"in": {
"path": "<field-to-search>",
"score": <options>,
"value": <single-or-array-of-values-to-search>
}
}
}
フィールド
タイプ
説明
必要性

path

string

検索するインデックス付きフィールド。ワイルドカード パス を指定して検索することもできます。

フィールドで 文字列 値を検索するには、フィールドを Atlas Search トークンタイプとしてインデックス必要があります。

必須

score

オブジェクト

一致する検索タームの結果に割り当てる スコア 。 スコアを変更するには、次のいずれかのオプションを使用します。

  • boost: 結果のスコアに指定された数値を掛けます。

  • constant: 結果のスコアを指定された数値に置き換えます。

  • function: 関数式を使用して結果スコアを置き換えます。

任意

value

ブール値ObjectId数値日付uuid 、またはstring

検索する値。 値は、サポートされているBSON types のいずれか 1 つのみの単一の値または値の配列のいずれかとして、異なるタイプを混在させることはできません。

フィールド内のstring値を検索するには、フィールドをAtlas Searchトークンタイプとしてインデックスする必要があります。

必須

次の例では、 in演算子を使用して、付属のsample_analytics.customersコレクション内のコレクションをクエリします。 サンプル データを Atlas クラスターにロードし、 defaultコレクションの 静的マッピング を使用する という名前の Atlas Search インデックスを 作成 すると、コレクションに対して次のクエリを実行できます。

サンプルのインデックス定義では、コレクション内のインデックス付きフィールドに対するin演算子クエリをサポートするために、次のアクションを指定します。

  • コレクション内のすべての動的にインデックス付け可能なフィールドを自動的にインデックス化します。

  • nameフィールドをトークンタイプとして静的にインデックスし、フィールドのテキストを小文字に変換します。

{
"mappings": {
"index": "default",
"dynamic": true,
"fields": {
"name": {
"normalizer": "lowercase",
"type": "token"
}
}
}
}

Atlas Search インデックスの作成方法については、「 Atlas Search インデックスの作成 」を参照してください。

次のクエリは、 in演算子を使用して、特定の日付に手順を実行したカスタマーを対象に、単一の 値を含むbirthdateフィールドで検索します。 クエリは、 $projectステージを使用して次の操作を実行します。

  • 結果の_idフィールドを省略します。

  • namebirthdate結果には フィールドと フィールドのみが含まれます。

1db.customers.aggregate([
2 {
3 "$search": {
4 "in": {
5 "path": "birthdate",
6 "value": [ISODate("1977-03-02T02:20:31.000+00:00"), ISODate("1977-03-01T00:00:00.000+00:00"), ISODate("1977-05-06T21:57:35.000+00:00")]
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 0,
13 "name": 1,
14 "birthdate": 1
15 }
16 }
17])
1[
2 {
3 name: 'Elizabeth Ray',
4 birthdate: ISODate("1977-03-02T02:20:31.000Z")
5 },
6 {
7 name: 'Brad Cardenas',
8 birthdate: ISODate("1977-05-06T21:57:35.000Z")
9 }
10]

Atlas Search は、クエリで指定された日付に一致する 2 つのドキュメントを返します。

次のクエリでは、 in演算子を使用して、アカウント番号371138371139 、または371140を持つカスタマーに対して、番号の配列を含むaccountsフィールドをクエリします。 クエリは、 $projectステージを使用して次の操作を実行します。

  • 結果の_idフィールドを省略します。

  • nameaccounts結果には フィールドと フィールドのみが含まれます。

1db.customers.aggregate([
2 {
3 "$search": {
4 "in": {
5 "path": "accounts",
6 "value": [371138, 371139, 371140]
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 0,
13 "name": 1,
14 "accounts": 1
15 }
16 }
17])
1[
2 {
3 name: 'Elizabeth Ray',
4 accounts: [ 371138, 324287, 276528, 332179, 422649, 387979 ]
5 }
6]

Atlas Search では、クエリで指定されたアカウント番号371138に一致するドキュメントが 1 つだけ返されます。

次のクエリは、 text演算子を使用して、 nameフィールドに最初の名前がJamesであるカスタマーをクエリします。 クエリは、 in _idフィールドの指定された ObjectId に関連付けられたカスタマーの優先順位を指定します。 クエリは、 $limitステージを使用して出力を5の結果に制限し、 $projectステージを使用して次のようにします。

  • _idname結果には フィールドと フィールドのみが含まれます。

  • scoreという名前のフィールドを結果に追加する。

1db.customers.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "must": [{
6 "in": {
7 "path": "name",
8 "value": ["james sanchez", "jennifer lawrence"]
9 }
10 }],
11 "should": [{
12 "in": {
13 "path": "_id",
14 "value": [ObjectId("5ca4bbcea2dd94ee58162a72"), ObjectId("5ca4bbcea2dd94ee58162a91")]
15 }
16 }]
17 }
18 }
19 },
20 {
21 "$limit": 5
22 },
23 {
24 "$project": {
25 "_id": 1,
26 "name": 1,
27 "score": { $meta: "searchScore" }
28 }
29 }
30])
1[
2 {
3 _id: ObjectId("5ca4bbcea2dd94ee58162a72"),
4 name: 'James Sanchez',
5 score: 2
6 },
7 {
8 _id: ObjectId("5ca4bbcea2dd94ee58162a71"),
9 name: 'Jennifer Lawrence',
10 score: 1
11 }
12]

Atlas Search では、 nameフィールドにJames SanchezJennifer Lawrenceを含むドキュメントが返されます。 Atlas Search は、 name: 'James Sanchez'を含むドキュメントは、 should句で指定されたObjectIdと一致するため、スコアが高くなります。

次のクエリは、in 演算子を使用して、ブール値値を含む activeフィールドで アクティブなカスタマーを検索します。クエリでは、誕生日が次のバケットに該当するアクティブなカスタマーの数が返されます。

  • 1970-01-01(このバケットの下限値を含む)

  • 1980-01-01(1970-01-01バケットの上限(排他的)とこのバケットの下限(包括的)

  • 1990-01-01(1980-01-01バケットの上限(排他的)とこのバケットの下限(包括的)

  • 2000-01-01: 1990-01-01バケットの排他的上限

1db.customers.aggregate([
2 {
3 "$searchMeta": {
4 "facet": {
5 "operator": {
6 "in": {
7 "path": "active",
8 "value": null
9 }
10 },
11 "facets": {
12 "birthdateFacet": {
13 "type": "date",
14 "path": "birthdate",
15 "boundaries": [ISODate("1970-01-01"), ISODate("1980-01-01"), ISODate("1990-01-01"), ISODate("2000-01-01")],
16 "default": "other"
17 }
18 }
19 }
20 }
21 }
22])
[
{
count: { lowerBound: Long('1') },
facet: {
birthdateFacet: {
buckets: [
{
_id: ISODate('1970-01-01T00:00:00.000Z'),
count: Long('1')
},
{
_id: ISODate('1980-01-01T00:00:00.000Z'),
count: Long('0')
},
{
_id: ISODate('1990-01-01T00:00:00.000Z'),
count: Long('0')
}
]
}
}
}
]