1

有没有办法在下一个查询中使用上一个查询返回的游标作为 $in 的值?例如,像这样:

var users = db.user.find({state:1})
var offers = db.offer.find({user:{$in:users}})

我认为这可以减少 mongodb 和客户端之间的流量,以防客户端根本不需要用户信息,只需提供。我错了吗?

4

2 回答 2

0

基本上,您想在 Mongo 不支持的两个集合之间进行连接。您可以通过将第一个查询返回的字段限制为仅从 offer 集合中获取数据所需的唯一用户信息(即 _id)来减少从服务器传输的数据量。

如果您真的只想进行一次查询,那么您应该在 offer 集合中存储更多信息。例如,如果您正在尝试为活动用户查找优惠,那么您会将用户的活动状态存储在优惠集合中。

于 2012-08-18T14:58:18.723 回答
0

根据您的评论工作:

是的,这就是我在问题中使用标签“加入”的原因。这个想法是我可以使用一堆字段和正则表达式使第一个查询更加复杂,而无需将用户数据存储在除引用之外的其他集合中。在这些情况下,我总是必须执行两个连续的查询,但是对于我和 mongodb 本身都不需要传输第一个查询的结果。我只是想了解现在是否可以完成,将来是否可以这样做,或者由于某些技术原因无法实施

据我了解,目前并不急于使这成为可能。此外,它的编码方式 atm 将对游标的工作方式和定义方式产生相当大的改变。一个大到足以可能导致其他人实施中断的变化。这确实是一个是否safe为所有未来驱动程序设置插入和更新的情况。人们认识到这safe应该是默认的,但这会破坏其他期望它的人的实现。

如果您根本不需要第一个查询的结果,这是相当低效的,但是由于大多数网络都准备好高流量并且流量很便宜,因此不需要使其能够执行链式查询服务器光标的一侧。

然而,子选择(这基本上是,它根据先前行的子选择来选择一组行)已经在 mongodb-user 上出现过几次,甚至可能在某个地方有一个 JIRA,如果没有可能有用做一个。

至于现在就做:没有办法。

于 2012-08-18T19:27:51.267 回答