mongoDB中的子查询问题
Posted
技术标签:
【中文标题】mongoDB中的子查询问题【英文标题】:Issue with subquery in mongoDB 【发布时间】:2019-02-25 17:44:43 【问题描述】:我想用 MongoDB 做一个简单的子查询,但是,在阅读了大量文档之后,仍然不明白:( 我使用了类似的代码,但没有成功:https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
select count(*) from Table1 where Field1 in (SELECT Field2 FROM Table2 where Field3 in ('QWERTY','ASDDF'));
你能帮忙吗? 谢谢。
已编辑: 我已经尝试过类似下面的方法,但仍然缺少...中的 field3 的过滤器
db.getCollection("Table1").aggregate(
[
"$group" :
"_id" :
,
"COUNT(*)" :
"$sum" : NumberInt(1)
,
"$project" :
"COUNT(*)" : "$COUNT(*)",
"_id" : NumberInt(0)
,
"$lookup":
"from": "Table2",
"localField": "Field1",
"foreignField": "Field2" ,
"as": "data"
,
"$match": "data.Field3": "$in" : [ "QWERTY", "ASDDF" ]
],
"allowDiskUse" : true
);
【问题讨论】:
您能分享一下您尝试过但没有成功的例子吗? 嗨,Alex B,现已编辑 【参考方案1】:如果我理解正确,您有两个这样的集合
collection1
[
"c" : 3,
"field" : 3
,
"b" : 2,
"field" : 2
,
"a" : 1,
"field" : 1
]
collection2
[
"field1" : 4,
"field2" : "kghjfdsa"
,
"field1" : 3,
"field2" : "dsfdgfdghdf"
,
"field1" : 2,
"field2" : "fdsfsd"
,
"field1" : 1,
"field2" : "adasd"
]
要查询您的数据,您只需要运行此查询
db.collection2.aggregate([
$match:
field2:
$in: ["kghjfdsa", "fdsfsd", "adasd"]
,
$lookup:
from: "collection1",
localField: "field1",
foreignField: "field",
as: "data"
,
$match:
"data.field": 1
])
如果我能提供其他帮助,请告诉我:)
【讨论】:
嗨@andranikasl,感谢您的回答。但是我已经尝试过了,它缺少foreignField“字段”的过滤器。想象一下,我只想要那些 field = 3 的那些。我一直在阅读提到的文档,我应该使用“let”和/或“pipeline”。 @PBR 你可以在查找后添加 $match: "data.field": 1
您好 Andranikasl,非常感谢您的回答。我很接近它,但仍然缺少一些东西。正如您在初始查询中所见: select count(*) from Table1 where Field1 in (SELECT Field2 FROM Table2 where Field3 in ('QWERTY','ASDDF')); field3 与我正在比较和查找的字段不同。还能用吗?以上是关于mongoDB中的子查询问题的主要内容,如果未能解决你的问题,请参考以下文章