asyncmongo嵌套查询

问题描述:

我存储项目的关系,它在结构属性:asyncmongo嵌套查询

{'item': <item_id>, 
'rel_name': 'sizes:4762', 
'rel_type': 'sizes', 
'rel_value': '4762'} 

而且具有MongoDB的查询,在MongoDB的外壳完美的作品:

db.relations.distinct(
    'rel_name', 
    {item:{ 
     $in: db.items.distinct('id', { 
      'attributes.cat': {$in:[477]}, 
      'attributes.sizes': {$in:[4762,5071,5072,5089,5555,903]} 
     }) 
    }} 
) 

,需要用asyncmongo运行它避免开销获取items.distinct的值并将其传递回mongo(可能超过10000) 也许有一种方法可以将整个查询作为字符串传递并获取结果吗?

+0

找到解决方案。如果您不需要使用游标并获取所有数据(如在我的'独特'查询中),则可以使用db.eval。但要小心,这种方法在分片上不起作用,[默认情况下,db.eval()需要一个写锁定,以便在运行时阻止所有的读/写操作](http://www.mongodb.org/display/ DOCS /服务器端+代码+执行) –

这只适用于shell和db.eval(),因为你会运行javascript。 在结束时,你将最终需要发送2点不同的命令来蒙戈服务器

  1. 收集从db.items集合中的所有尺寸,这是在列表中您发送

  2. 匹配与与每个人的'real_name:id'。

如果您使用的是异步框架,那么您将优化的唯一一件事就是您可以为每个cursor.next()事件处理第二个查询。这些仍然是2个不同的查询,你会发送。

+0

您能否说明您的解决方案?关于游标是好事,但是如何连接两个查询的游标并避免在asyncmongo和mongo之间传递大量数据或者查询大量数据?查询每个标识会给出不同的结果,需要过滤和aggergation。 –