Ниже приведен пример с использованием Драйвер Mongoose для NodeJS. Это не то, что полезно, чтобы иметь возможность сделать это в скорлупе, так вот она в Mongooose:
var docsWithoutA = [];
var stream = db.colB.find({}).stream();
stream.on("data", function (doc) {
colA.find({"_id": doc.referenceKeyHere}, function (err, docs) {
if (err) return;
if (!docs[0]) { docsWithoutA.push(doc) } //doc here is the doc from B with no find results in A
//found at least one ref'd doc.
})
})
stream.on("close", function() {
console.log(docsWithoutA); //Stream closes, here is your list
})
Это временно присоединиться к выполнению вашего конкретного запроса.
Настоящий ответ заключается в том, что вы никогда не должны присоединяться к MongoDB, ссылки этого класса лучше всего обрабатывать путем создания поддокументов. Больше информации: https://docs.mongodb.org/manual/
EDIT: Кстати, я больше не уверен в своем утверждении, чтобы показать вам, как это сделать в оболочке Mongo, поскольку я забыл, что $ lookup теперь недоступен в версии 3.0. Ответ кого-то другого (удаленный, я думаю?) Также столкнулся с этой проблемой.
Я могу показать вам, как это сделать в родной оболочке mongoDB, но у меня есть ощущение, что вам не нужно это делать. Используете ли вы бэкэнд javascript? – awimley
Я использую .Net, но если вы можете привести мне пример, я изменю код для работы на C#. Btw Я использую Mongo 3.0. –
Какую версию Монго вы используете? 3.2 поддерживает левые внешние соединения через этап агрегации [$ lookup] (https://docs.mongodb.org/manual/reference/operator/aggregation/lookup/). – BanksySan