次の方法で共有


$type (要素クエリ)

適用対象: MongoDB 仮想コア

$type演算子は、フィールドが指定した型の場合にドキュメントを選択します。 これは、データの検証と、コレクション内のドキュメント間の一貫性を確保する場合に役立ちます。 $type演算子は、BSON 型の数値と文字列のエイリアスの両方を受け取ります。

構文

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

{
  <field>: { $type: <BSON type number> | <string alias> }
}

パラメーター

説明
field 型を確認するフィールド。
BSON type number BSON 型に対応する数値 (たとえば、double の場合は 1、文字列の場合は 2)。
string alias BSON 型の文字列エイリアス (例: "double"、"string"、"object"、"array")。

一般的な BSON 型

タイプ 番号 別名 説明
ダブル 1 "double" 64 ビット浮動小数点
2 "string" UTF-8 文字列
オブジェクト 3 オブジェクト 埋め込みドキュメント
配列 4 "array" 配列
オブジェクト識別子 7 "objectId" オブジェクト識別子
ボーリアン 8 "bool" ボーリアン
日付 9 "date" 日付
無効 10 "null" Null 値
32 ビット整数 16 "int" 32 ビット整数
タイムスタンプ 十七 "timestamp" タイムスタンプ
64 ビット整数 18 "long" 64 ビット整数

stores データセットのサンプル JSON の使用方法を理解しましょう。

{
  "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
  "name": "Trey Research | Home Office Depot - Lake Freeda",
  "location": { "lat": -48.9752, "lon": -141.6816 },
  "staff": { "employeeCount": { "fullTime": 12, "partTime": 19 } },
  "sales": {
    "salesByCategory": [ { "categoryName": "Desk Lamps", "totalSales": 37978 } ],
    "revenue": 37978
  },
  "promotionEvents": [
    {
      "eventName": "Crazy Deal Days",
      "promotionalDates": {
        "startDate": { "Year": 2023, "Month": 9, "Day": 27 },
        "endDate": { "Year": 2023, "Month": 10, "Day": 4 }
      },
      "discounts": [
        { "categoryName": "Desks", "discountPercentage": 22 },
        { "categoryName": "Filing Cabinets", "discountPercentage": 23 }
      ]
    }
  ],
  "company": "Trey Research",
  "city": "Lake Freeda",
  "storeOpeningDate": "2024-09-26T22:55:25.779Z",
  "lastUpdated": "Timestamp({ t: 1729983325, i: 1 })"
}

例 1: 文字列型の名前を持つストアを検索する

この例では、 name フィールドが文字列型であるすべてのストアを検索します。

db.stores.find(
 { "name": { $type: "string" }},
 { "_id": 1, "name": 1 }).limit(1)

クエリは、 name フィールドに文字列値が含まれているすべてのドキュメントを返します。

{
  "_id": "a715ab0f-4c6e-4e9d-a812-f2fab11ce0b6",
  "name": "Lakeshore Retail | Holiday Supply Hub - Marvinfort"
}

例 2: 複数の型チェックを使用したデータ検証

この例では、必須フィールドに正しいデータ型があることを検証する方法を示します。

db.stores.find({
  "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
  "name": { $type: "string" },
  "location": { $type: "object" },
  "staff.employeeCount.fullTime": { $type: ["int", "long"] },
  "promotionEvents": { $type: "array" }},
  { "_id": 1, "name": 1,"location":1, "staff": 1 }
)

このクエリは、指定されたすべてのフィールドに予期されるデータ型があるストアを返し、データの一貫性を確保します。

{
  "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
  "name": "Trey Research | Home Office Depot - Lake Freeda",
  "location": { "lat": -48.9752, "lon": -141.6816 },
  "staff": { "employeeCount": { "fullTime": 12 } }
}