0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-12-01 01:21:03 +01:00
mongodb/jstests/sharding/graph_lookup.js

50 lines
1.6 KiB
JavaScript

// Test aggregating a sharded collection while using $graphLookup on an unsharded collection.
(function() {
'use strict';
const st = new ShardingTest({shards: 2, rs: {nodes: 1}});
assert.commandWorked(st.s0.adminCommand({enablesharding: "test"}));
assert.commandWorked(st.s0.adminCommand({shardCollection: "test.foo", key: {_id: "hashed"}}));
let db = st.s0.getDB("test");
assert.writeOK(db.foo.insert([{}, {}, {}, {}]));
assert.writeOK(db.bar.insert({_id: 1, x: 1}));
const res = db.foo
.aggregate([{
$graphLookup: {
from: "bar",
startWith: {$literal: 1},
connectFromField: "x",
connectToField: "_id",
as: "res"
}
}])
.toArray();
assert.eq(res.length, 4);
res.forEach(function(c) {
assert.eq(c.res.length, 1);
assert.eq(c.res[0]._id, 1);
assert.eq(c.res[0].x, 1);
});
// Be sure $graphLookup is banned on sharded foreign collection.
assert.commandWorked(st.s0.adminCommand({shardCollection: "test.baz", key: {_id: "hashed"}}));
assert.commandWorked(db.baz.insert({_id: 1, x: 1}));
const err = assert.throws(() => db.foo.aggregate([{
$graphLookup: {
from: "baz",
startWith: {$literal: 1},
connectFromField: "x",
connectToField: "_id",
as: "res"
}
}]));
assert.eq(28769, err.code);
st.stop();
})();