我将项目的关系及其属性存储在结构中:
{'item': <item_id>,
'rel_name': 'sizes:4762',
'rel_type': 'sizes',
'rel_value': '4762'}
并且mongoDB查询在mongodb shell中完美运行:
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 :(得分:1)
这只适用于shell和db.eval(),因为你将运行javascript。 最后,您最终需要向mongo服务器发送2个不同的命令
从db.items集合中收集所有大小,这些大小位于您要发送的列表中
与每个具有'real_name:id'的那些匹配。
如果使用异步框架,那么您要优化的唯一事情就是每个cursor.next()事件都可以处理第二个查询。这些仍然是您要发送的两个不同的查询。