首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB C#/VB.Net驱动程序发送多个嵌套查询

MongoDB C#/VB.Net驱动程序发送多个嵌套查询
EN

Stack Overflow用户
提问于 2014-08-01 15:11:19
回答 1查看 838关注 0票数 0

我有2-3个集合,从MongoDB shell我可以有一个查询,如下所示:

代码语言:javascript
复制
db.Products.distinct("ProdName",{_id:{"$in":db.Order.distinct("ProdID",{"OrderID" : 555})}})

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

我的问题是关于C#的,我们是否可以在单次调用中传递上述mongoQuery,或者指示mongodb在被告知之前不能获取?目前,似乎有两个数据库调用发生在C#,但是在MongoDB中,它下面的一个调用就是c#代码来获取结果。

代码语言:javascript
复制
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)

请让我知道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-04 05:53:48

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

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

如果您不确定,可以使用MongoDB数据库分析器来检查它:

代码语言:javascript
复制
// 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开始)不支持涉及多个集合的单个查询(也称为“加入”)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25083297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档