可以在MongoDB中执行SQL内部连接之类的操作吗?

我知道聚合管道中有$lookup属性,它相当于SQL中的outer joins,但我想做一些类似于inner joins的事情.

我有三个系列需要合并:

// User Collection
db.User.find({});

// Output:
{
   ID : 1,
   USER_NAME : "John",
   password : "pass"
}
{

   ID : 2,
   USER_NAME : "Andrew",
   PASSWORD : "andrew"
}

// Role Collection
db.ROLE.find({});

// Output:
{
   ID : 1,
   ROLE_NAME : "admin"
},
{
    ID : 2,
    ROLE_NAME : "staff"
}

// USER_ROLE Collection
db.USER_ROLE.find({});

// Output:
{
   ID : 1,
   USER_ID : 1,
   ROLE_ID : 1
}

我有上面的集合,我只想提取与用户及其各自角色匹配的文档,而不是所有文档.我如何在MongoDB中管理它?

推荐答案

正如提拉米苏所写,这看起来像是一个模式问题.

通过删除$lookup返回空数组的文档,可以进行手动内部联接.

....
{$lookup... as myArray},
{$match: {"myArray":{$ne:[]}}},
{$lookup... as myArray2},
{$match: {"myArray2":{$ne:[]}}},

模式更改

我个人将进行模式更新,如下所示:

db.User.find({})
{
   ID : 1,
   USER_NAME : "John",
   password : "pass"
   roles:[{ID : 1,  ROLE_NAME : "admin"}]
}


db.ROLE.find({})
{
   ID : 1,
   ROLE_NAME : "admin"
},

Mongodb相关问答推荐

如何在MongoDB中正确解析佛年?

从两个相连的文件中获取电话和邮箱的渠道是什么?

如何在Mongodb Mongoose Nodejs中提取不等于一组值的字段

mongoDB中数组中的聚合和元素

尽管前一阶段输出文档,$group stage 仍返回零文档

MongoDB - 家庭作业(job)帮助.不确定如何在 mongodb 中访问文档中的变量

在 MongoDB 中使用 findOneAndUpdate 有条件地更新/更新嵌入式数组

Meteor 方法与deny/allow 规则

Mongo查找对象内最长数组的查询

如何在 MongoDB 中进行内部连接?

NoSql 参考数据

ExpressJS & Mongoose REST API struct :最佳实践?

Mongoose 连接认证失败

错误:Could not connect to any servers in your MongoDB Atlas cluster

在MongoDB中查询一个半​​径内的位置

Mongodb错误:The positional operator did not find the match needed from the query

如何在 NoSql 数据库(MongoDB)中强制执行外键?

通过 Java 执行 Mongo like Query (JSON)

如何在 golang 和 mongodb 中通过 id 查找

如何使用户的邮箱在 mongoDB 中唯一?