MongoDB c# / VB.发送多个嵌套查询

本文关键字:嵌套 查询 VB MongoDB | 更新日期: 2023-09-27 18:16:03

我有2-3个集合,从MongoDB shell我可以有一个单一的查询方式如下:

db.Products.distinct("ProdName",{_id:{"$in":db.Order.distinct("ProdID",{"OrderID" : 555})}})

这个工作得很好,我没有使用嵌入式方法,因为我的集合大小是数百万,所以它是不可行的。

我的问题与c#有关,我们可以在单次调用中传递上述mongoQuery或指示mongodb不获取,直到被告知?目前似乎有2个数据库调用发生从c#,但从MongoDB它只是一个调用下面是c#代码获取结果

Dim mongoQuery1 = Query.EQ("OrderID", iOrderID)
Dim collection1 = db.GetCollection(Of BsonDocument)("Order").Distinct("ProdID", mongoQuery1)
Dim ProdIDs = collection1.ToArray()
Dim newBsonArray1 = New BsonArray(ProdIDs)
Dim mongoQuery2 = Query.In("_id", newBsonArray1)
Dim collection2 = db.GetCollection(Of BsonDocument)("Products").Distinct("ProdName", mongoQuery2)

请告诉我。

MongoDB c# / VB.发送多个嵌套查询

db.Products.distinct("ProdName"{_id:{"美元":db.Order。distinct("ProdID",{"OrderID": 555})}})

在这个mongo shell示例中,您实际上是在MongoDB服务器上执行两个查询,尽管出现了一个带有函数调用的单个查询。在将查询发送到服务器之前,mongo shell将解析任何变量(包括对db.Order.distinct()的调用)。

如果你不相信,你可以使用MongoDB数据库分析器检查:

// Enable profiling for all queries
db.setProfilingLevel(2)
// Run the "single" query
db.Products.distinct("ProdName",{_id:{"$in":db.Order.distinct("ProdID",{"OrderID" : 555})}})
// Disable profiling
db.setProfilingLevel(0)
// Query for the profile entries distinct command
db.system.profile.find({ "op":"command", "command.distinct": { $exists: true }})

等效的c#代码也将涉及两个查询,因为您正在查询两个不同的集合。MongoDB(如2.6)明确不支持涉及多个集合(即"join")的单个查询。