有没有办法在上一个查询中将前一个查询返回的游标用作$ in的值?例如,像这样:
var users = db.user.find({state:1})
var offers = db.offer.find({user:{$in:users}})
我认为这可以减少mongodb和客户端之间的流量,以防客户端根本不需要用户信息。我错了吗?
答案 0 :(得分:0)
基本上你想在Mongo不支持的两个集合之间进行连接。您可以通过将第一个查询返回的字段限制为从商品集合中获取数据所需的唯一用户信息(即_id)来减少从服务器传输的数据量。
如果您真的只想进行一次查询,那么您应该在商品集合中存储更多信息。例如,如果您尝试为活动用户查找商品,则可以将商品的活动状态存储在商品集合中。
答案 1 :(得分:0)
根据你的评论工作:
是的,这就是我在一个问题中使用标签'join'的原因。我的想法是 可以使用一堆字段和第一个查询更多сomplex 正则表达式而不将用户数据存储在其他集合中 引用。在这些情况下,我总是要连续两次执行 查询,但不转移第一个查询的结果 既不需要我也不需要mongodb本身。我只想 理解现在可以做到,是否可以这样做 未来或由于某些技术原因无法实施
据我了解,目前没有急于让这成为可能。此外,编码atm的方式将使游标的工作和定义方式发生相当大的变化。变化很大,可能导致其他人实施中断。实际上,是否为所有未来的驱动程序设置safe
以进行插入和更新。人们认识到safe
应该是默认的,但是这会破坏其他人的实现。
如果您根本不需要第一个查询的结果,效率相当低,因为大多数网络都考虑到了高流量并且流量很便宜,因此没有要求它能够做到这一点链接查询服务器端的光标。
然而,子选择(这基本上是,它基于前一行的子选择选择一组行)已经在mongodb-user上进行了几次,甚至可能在某处有一个JIRA,如果不是制作一个可能很有用。
至于目前这样做:没有办法。