90 lines
2.9 KiB
JavaScript
90 lines
2.9 KiB
JavaScript
// Test that missing values are not returned when the connectFrom value in a $graphLookup is null.
|
|
(function() {
|
|
"use strict";
|
|
|
|
load("jstests/aggregation/extras/utils.js"); // arrayEq
|
|
|
|
var local = db[jsTestName()];
|
|
|
|
local.drop();
|
|
|
|
assert.commandWorked(local.insert([
|
|
{"_id": 0, "x": 1, "y": 1},
|
|
{"_id": 1, "x": 1, "y": null},
|
|
{"_id": 2, "x": 1, "y": 1},
|
|
{"_id": 3, "x": 1}
|
|
]));
|
|
|
|
let result = local.aggregate([
|
|
{$graphLookup: {
|
|
from: local.getName(),
|
|
startWith: "$y",
|
|
connectFromField: "x",
|
|
connectToField: "y",
|
|
as: "arr",
|
|
maxDepth: 0}}
|
|
]).toArray();
|
|
let expected = [
|
|
{"_id": 0, "x": 1, "y": 1, "arr": [{"_id": 2, "x": 1, "y": 1}, {"_id": 0, "x": 1, "y": 1}]},
|
|
{"_id": 1, "x": 1, "y": null, "arr": [{"_id": 1, "x": 1, "y": null}]},
|
|
{"_id": 2, "x": 1, "y": 1, "arr": [{"_id": 2, "x": 1, "y": 1}, {"_id": 0, "x": 1, "y": 1}]},
|
|
{"_id": 3, "x": 1, "arr": []}
|
|
];
|
|
assert(arrayEq(expected, result), "Expected:\n" + tojson(expected) + "\nGot:\n" + tojson(result));
|
|
assert.commandWorked(local.insert({"_id": 4, "x": 1, "y": undefined}));
|
|
|
|
result = local.aggregate([
|
|
{$graphLookup: {
|
|
from: local.getName(),
|
|
startWith: null,
|
|
connectFromField: "x",
|
|
connectToField: "y",
|
|
as: "arr",
|
|
maxDepth: 0}}
|
|
]).toArray();
|
|
|
|
expected = [
|
|
{"_id": 0, "x": 1, "y": 1, "arr": [{"_id": 1, "x": 1, "y": null}]},
|
|
{"_id": 1, "x": 1, "y": null, "arr": [{"_id": 1, "x": 1, "y": null}]},
|
|
{"_id": 2, "x": 1, "y": 1, "arr": [{"_id": 1, "x": 1, "y": null}]},
|
|
{"_id": 3, "x": 1, "arr": [{"_id": 1, "x": 1, "y": null}]},
|
|
{"_id": 4, "x": 1, "y": undefined, "arr": [{"_id": 1, "x": 1, "y": null}]}
|
|
];
|
|
assert(arrayEq(expected, result), "Expected:\n" + tojson(expected) + "\nGot:\n" + tojson(result));
|
|
|
|
local.drop();
|
|
|
|
// Test missing doesn't match missing.
|
|
assert.commandWorked(
|
|
local.insert([{"_id": 0, "x": 1, "y": 1}, {"_id": 1, "x": 2}, {"_id": 3, "x": 1}]));
|
|
result = local.aggregate([
|
|
{$graphLookup: {
|
|
from: local.getName(),
|
|
startWith: "$y",
|
|
connectFromField: "x",
|
|
connectToField: "y",
|
|
as: "arr",
|
|
maxDepth: 0}}
|
|
]).toArray();
|
|
expected = [
|
|
{"_id": 0, "x": 1, "y": 1, "arr": [{"_id": 0, "x": 1, "y": 1}]},
|
|
{"_id": 1, "x": 2, "arr": []},
|
|
{"_id": 3, "x": 1, "arr": []}
|
|
];
|
|
assert(arrayEq(expected, result));
|
|
local.drop();
|
|
assert.commandWorked(local.insert([{"_id": 0, "x": 1}, {"_id": 1, "x": 2}, {"_id": 3, "x": 1}]));
|
|
result = local.aggregate([
|
|
{$graphLookup: {
|
|
from: local.getName(),
|
|
startWith: "$y",
|
|
connectFromField: "x",
|
|
connectToField: "y",
|
|
as: "arr",
|
|
maxDepth: 0}}
|
|
]).toArray();
|
|
expected =
|
|
[{"_id": 0, "x": 1, "arr": []}, {"_id": 1, "x": 2, "arr": []}, {"_id": 3, "x": 1, "arr": []}];
|
|
assert(arrayEq(expected, result), "Expected:\n" + tojson(expected) + "\nGot:\n" + tojson(result));
|
|
}());
|