mongodb - Mongo DB加入主/外键
问题描述
我有两个集合,即:clib
和mp
. 的架构clib
是 :{name: String, type: Number}
和架构mp
是: {clibId: String}
。
样本文件clib
:
{_id: ObjectId("6178008397be0747443a2a92"), name: "c1", type: 1}
{_id: ObjectId("6178008397be0747443a2a91"), name: "c2", type: 0}
样本文件mp
:
{clibId: "6178008397be0747443a2a92"}
{clibId:"6178008397be0747443a2a91"}
在查询mp
时,我想要那些clibId's
收藏。type = 0
clib
有什么想法可以实现吗?
我能想到的一种方法是使用$lookUp
,但这似乎不起作用。另外,我不确定这是否是 mongodb 的反模式,另一种方法是在保存时复制type
from clib
to 。mp
mp document
解决方案
如果我理解正确,您可以使用这样的管道:
此查询clib
从其_id
与 相同clibId
且也具有的位置获取值type = 0
。此外,我还添加了一个$match
阶段,以不输出没有任何巧合的值。
db.mp.aggregate([
{
"$lookup": {
"from": "clib",
"let": {
"id": "$clibId"
},
"pipeline": [
{
"$match": {
"$expr": {
"$and": [
{
"$eq": [
{
"$toObjectId": "$$id"
},
"$_id"
]
},
{
"$eq": [
"$type",
0
]
}
]
}
}
}
],
"as": "result"
}
},
{
"$match": {
"result": {
"$ne": []
}
}
}
])
这里的例子
推荐阅读
- javascript - websocket握手期间的Flask SocketIO错误:意外的响应代码:400
- google-cloud-platform - 谷歌云存储(GCS)检查过去版本的上传日期时间
- javascript - 语义发布 - 向自动生成的发布说明添加更多部分
- node.js - 崩溃后如何自动重启rabbitmq
- authentication - Teams Bot:用户记录的事件
- python - 从外部向卷积输出添加另一层
- julia - 在 julia 中声明和更改变量值的问题
- php - 在 yii 框架中创建时插入的数据如何存储在数据库中?
- go - 递归打印树状结构的完整列表时遇到一些问题
- unix - 如何用 2 个单词创建 kotlin 中缀函数?