我有2-3个集合,从MongoDB shell我可以有一个查询,如下所示:
db.Products.distinct("ProdName",{_id:{"$in":db.Order.distinct("ProdID",{"OrderID" : 555})}})这很好,我没有使用嵌入式方法,因为我的集合大小是数百万,所以它不是假的。
我的问题是关于C#的,我们是否可以在单次调用中传递上述mongoQuery,或者指示mongodb在被告知之前不能获取?目前,似乎有两个数据库调用发生在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)请让我知道。
发布于 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数据库分析器来检查它:
// 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开始)不支持涉及多个集合的单个查询(也称为“加入”)。
https://stackoverflow.com/questions/25083297
复制相似问题