// Test $type expression with non-existent field in the document.

(function() {
"use strict";

const coll = db.type_operator_on_missing_values;
coll.drop();

const documentList = [
    {_id: 0},
    {_id: 1, b: 123},
];
assert.commandWorked(coll.insert(documentList));

const bsonTypes = [
    "double",    "string",    "object",     "array",   "binData",
    "undefined", "objectId",  "bool",       "date",    "null",
    "regex",     "dbPointer", "javascript", "symbol",  "javascriptWithScope",
    "int",       "timestamp", "long",       "decimal", "minKey",
    "maxKey",
];

for (const type of bsonTypes) {
    let results = coll.find({a: {$type: type}}).sort({_id: 1}).toArray();
    assert.eq(results, []);

    results = coll.find({a: {$not: {$type: type}}}).sort({_id: 1}).toArray();
    assert.eq(results, documentList);
}
}());